💎 동기화된 컬렉션
컬렉션 프레임워크의 대부분의 클래스들은 싱글 쓰레드 환경에서 사용할 수 있도록 설계되었다. Vector
와 HashTable
은 동기화된(Synchronized) 메서드로 구성되어 있기 때문에 멀티 스레드 환경에서 안전하게 요소를 처리가 가능하다.
- ArrayList, HashSet, HashMap은 동기화된 메서드로 구성되어 있지 않아, 멀티 스레드 환경에서 안전하지 않다.
- 이런 경우를 대비해서, 비동기화된 메서드를 동기화된 메서드로 wrapping하는 Collections의 synchronized~ 메서드를 제공하고 있다.
- Synchronized~ ( 비동기 컬렉션 ) ⇒ 동기화된 컬렉션
💎 synchronized 비동기 컬렉션 메서드
타입 | 메서드(매개변수) |
---|
List | synchronizedList(List list) |
Map | synchronizedMap(Map <K, V> map) |
Set | synchronizedSet(Set set) |
💎 병렬 처리를 위한 컬렉션
대부분의 컬렉션 프레임 워크는 싱글쓰레드 환경에서 사용할 수 있도록 설계되었기 때문에 전체 요소를 빠르게 처리하지 못한다.
Java는 멀티 쓰레드 환경에서 컬렉션의 요소를 병렬적으로 처리할 수 있도록 아래와 같은 컬렉션을 제공한다.
ConcurrentHashMap
- 쓰레드에 안전하면서 멀티 스레드가 해당 요소를 병렬적으로 처리 가능하다.
- ConcurrentHashMap의 경우 부분 잠금(Segment Locking)을 사용하기 때문이다.
ConcurrentLinkedQueue
- Lock -Free 알고리즘을 구현한 컬렉션이다.
- 락 프리 알고리즘은 여러 개의 쓰레드가 동시에 접근할 경우 잠금을 사용하지 않고도 최소한 하나의 쓰레드가 안전하게 요소를 저장하거나 얻도록(GET) 해준다.