HashTable, HashMap, ConcurrentHashMap

Gunjoo Ahn·2022년 8월 27일
0

위 셋은 multi thread 환경에서 동시성 문제로 묶어서 비교할 수 있는 자바 자료구조들이다.

HashTable

synchronized 키워드가 데이터 변경 메소드에 선언되어 있다. 따라서 동시성 문제는 없다. 다만 느리다.

key, value에 null을 허용하지 않는다.

HashMap

동시성 문제를 고려하지 않았다. 따라서 빠르다.

key, value에 null을 허용한다.

HashMap을 사용하는데 동시성 문제가 있다면 Collections.synchronizedMap(new HashMap(...));을 통해서 동시성 문제를 해결할 수 있다.

ConcurrentHashMap

Lock free에 대하여 정리했을 때 다룬 CAS를 데이터 수정시에 적용하였다. 읽을 때는 lock을 걸지 않는다.

key, value에 null을 허용하지 않는다.

Fail-Fast 방식
동작중 오류가 발생하면 바로 오류를 알리고, 작업을 중단
Fail-Safe 방식
동작중 오류가 발생하도 작업을 중단하지 않고 진행

Multi Thread 환경에서 뭘 쓸까?

synchornized키워드가 걸려있는 친구는 빼고, ConcurrentHashMapCollections.synchronizedMap() 중 에서 장단점 및 언제 무엇을 써야할지 찾아 보았다. ConcuttentHashMap vs Collections.synchronizedMap()에서 볼 수 있듯 ConcurrentHashMapCollection.synchronizedMap()보다 성능이 우수하다.

대부분의 multi thread의 경우 ConcurrentHashMap을 사용하면 된다. 다만 급하게 기존 HashMap을 동시성을 지원하도록 수정해야할 경우 Collections.synchronizedMap()이 도움일 될 것이다.

Reference

https://www.baeldung.com/java-synchronizedmap-vs-concurrenthashmap
https://tecoble.techcourse.co.kr/post/2021-11-26-hashmap-hashtable-concurrenthashmap/
https://www.baeldung.com/java-concurrent-map
https://applepick.tistory.com/124
https://118k.tistory.com/656

profile
Backend Developer

0개의 댓글