1. HashTable
- 데이터를 변경하는 메서드가 모두 Synchronized 동기화 메서드로 선언되어 있다.
- 그렇기 때문에, 멀티 스레드 환경에서는 메서드 호출 전 Synchronized Lock을 걸기 때문에 데이터의 무결성이 보장된다.
- 그러나 Synchronized Lock에는 많은 시간이 소요되기 때문에 속도가 느리다.
- key, value에 null 값을 허용하지 않는다.
2. HashMap
- Synchronized 처리가 되지 않기 때문에 속도는 빠르지만 데이터의 무결성은 보장되지 못한다.
- 단일 스레드 환경에 적합하다.
2.1 SynchronizedMap
- Map Interface를 SynchronizedMap으로 wrapping하여 해당하는 객체를 동기화시킬 수 있다.
- Map<T, F> map = Collections.synchronizedMap(new HashMap<T, F>());
3. ConcurrentHashMap
- Java 1.5부터 사용 가능한 ConcurrentUtil Interface에서 제공하는 클래스이다.
- HashMap과 달리 key, value에 null 값을 허용하지 않고, putIfAbsent(Object Key, Variable->Value)라는 메서드를 갖고 있다.
- SynchronizedMap이나 HashTable보다 빠른 속도로 스레드의 동기화를 보장한다.
- 동기화 시 Map 전체에 Synchronized Lock을 걸지 않고, Map을 여러 조각으로 쪼개 일부만 Synchronized Lock을 걸기 때문에, 멀티 스레드 환경에서 스레드 간의 경쟁이 심한 경우 더 빠른 속도의 효율적인 성능을 보인다.
4. HashTable, HashMap, ConcurrentHashMap 공통점
- Map Interface를 implements한 AbstractMap을 상속 받아 구현하고 있다.
참고
'Java' 카테고리의 다른 글
BufferedReader, BufferedWriter (0) | 2021.12.02 |
---|---|
Abstract Class, Interface 차이점 (0) | 2021.11.25 |
JAR, WAR, EAR 차이점 (0) | 2021.11.11 |
SOLID 원칙 (0) | 2021.10.06 |
객체 지향 프로그래밍과 절차적 프로그래밍 (0) | 2021.10.06 |