자바
[JAVA] Hashtable, HashMap, ConcurrentHashMap 차이점
planting grass
2023. 4. 10. 16:04
728x90
ConcurrentHashMap
Map 인터페이스를 구현한 콜랙션 객체 중 비슷하면서 자주 사용되는 것들은 아래와 같다.
- Hashtable
- HashMap
- ConcurrentHashMap
특징 | Hashtable | HashMap | ConcurrentHashMap |
쓰레드 안전성 | thread-safe | thread-unsafe | thread-safe |
키와 값의 null 허용 여부 | 허용하지 않음 | 허용함 | 허용하지 않음 |
성능 | 느림 | 빠름 | 빠름 |
위 클래스는 Map 인터페이스를 구현한 콜렉션들이다.
이것들은 기본적으로 <key, value>
구조를 지닌다.
하나하나 무엇이 다른지 확인해보자.
Hashtable
- put, get같은 주요 메소드에
synchronzed
키워드가 선언돼 있다.synchronzed
는 메소드를 호출 전 쓰레드간 동기화 락을 걸어준다.- ⇒ 멀티 쓰레드 환경에서도 데이터의 무결성을 보장한다.
무결성: 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제값이 일치하는 정확성을 의미한다. - But, 쓰레드간 동기화 락은 느리다는 단점을 지닌다.
<key, value>
에 null값을 입력하는게 허용되지 않는다.
HashMap
- 주요 메서드에
synchronzed
가 없다.synchronzed
가 없기 때문에 성능이 빠르다.- 멀티 쓰레드에서 동시성 때문에 사용이 불가능하다.
<key, valuse>
에 null값을 입력하는게 허용된다.
ConcurrentHashMap
- 위 Hashtable과 HashMap의 단점을 보완하기위해 나타났다.
- thread-safe하기 때문에, 멀티 쓰레드에서 사용이 가능하다.
synchronzed
는 없기 때문에, map 전체에 lcok을 걸지 않는다.- map의 일부에만 lock을 건다.
<key, value>
에 null값을 입력하는게 허용되지 않는다.
728x90