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을 상속 받아 구현하고 있다.

 

참고

- https://soobarkbar.tistory.com/51

- https://j-i-y-u.tistory.com/30

'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