카테고리 없음

hashmap, hashtable, ConCurrentHashMap 의 차이점

dosona 2018. 4. 20. 19:45

현재 공부용으로 캐치마인드 모바일 버전을 만들고있는데 

게임 턴을 나누는데 있어서, 간헐적으로 오류가 생기곤했다. 그래서 Thread-Safe라는것을 공부했고,

서버단의 소스에 문제가 있다는걸 알게되었다.

hashmap은 동기화가 되지않아 멀티 쓰레드상황에서 적합하지 않다는 것이 였다.

그래서 Collections.synchromizedmap(map)을 이용해서 해결할려고 했으나, hashmap은 동기화를 보장하지 않는다는 것이였다.

그래서 map, hashtable, ConCurrentHashMap을 이용하려고 차이점을 찾고 정리한다.

HashMap

HashMap은 synchronized 키워드가 없기 때문에 동기화가 보장되지 못한다. (싱글 스레드 환경에서 사용하길) 따라서 동기화처리를 하지 않기 때문에 값을 찾는 속도가 상당히 빠르다. 또한 HashTable과 다르게 key,value null값을 허용한다. 즉 속도가 빠르지만, 신뢰성 안정성은 떨어진다고 생각하면 된다.

ConCurrentHaspMap

HashMap의 멀티스레드 환경에서의 동기화처리로 인한 문제점을 보완한 것이 ConCurrentHashMap이다. 
하지만 HashMap과 다르게 key,value에 null을 허용하지 않는다.


HashTable

HashTable의 메서드는 전부 synchronized 키워드가 붙어있기 때문에 메서드 호출 전 쓰레드간 동기화 락을 통해 멀티 쓰레드 환경에서 data의 무결성을 보장해준다. 또한 key,value값의 null을 허용하지 않는다. 즉 동기화 락때문에 속도는 느리지만, data의 안정성이 높고 신뢰가 높은 컬렉션이다.


출처 : http://jdm.kr/blog/197