~2022/Java

[Java] HashMap, HashTable, ConcurrentHashMap

maruIsCat 2021. 10. 25. 13:34

1. HashMap
   - Thread-Safe하지 못한 클래스
   - Multi-Thread 환경에서 안전하게 사용하기 위해 Collections.synchronizedMap(hashMap) 등으로 동기화 처리 필요
   - key, value에 null 허용

2. HashTable
   - 데이터 관련 메소드에 synchronized 처리가 되어있어 멀티 스레드 환경에서 안전하게 사용 가능
   - 동기화 Lock 때문에 속도가 느리다
   - key, value에 null을 허용하지 않음

3. ConcurrentHashMap
   
- HashTable처럼 항상 동기화 Lock을 걸지는 않고,
       . 빈 해시 버킷에 데이터를 삽입하는 경우, CAS(Compared And Swap)를 이용하여 원자성을 보장한다
       . 이미 데이터가 존재하는 해시 버킷 서로 다른 스레드가 접근 할 때만 동기화 Lock이 걸리게 된다
       . HashTable보다 성능면에서 우수
   - key, value에 null을 허용하지 않음