java.util 패키지의 컬렉션 프레임워크
대부분 Thread safe하지 않음
단일 스레드가 컬렉션 사용 시 성능이 좋다
Collections.synchronized~ 동기화 메서드
스레드 안전하지 않은 많은 컬렉션들을 편리하게 스레드 안전한 컬렉션으로 변경해준다
단점
- 동기화 오버헤드
- 잠금 범위가 넓어져 잠금 경합(Lock contention) 증가, 병렬 처리 효율 저하
- 모든 메서드에 동기화 적용
- 정교한 동기화 불가
- 과도한 동기화
java.util.concurrent 패키지의 컬렉션 프레임워크
위 방식의 단점 보완
자바 1.5부터 제공
스레드 안전하며 고성능 멀티 스레드 환경을 지원하는 다양한 동시성 컬렉션 클래스 제공
다양한 성능 최적화 기법이 적용되어 있다
- synchronized
- Lock (ReentrantLock)
- CAS
- 분할 잠금 기술 (Segment lock)
- ..
종류
- List
- ArrayList
- CopyOnWriteArrayList
- ArrayList
- Set
- HashSet
- CopyOnWriteArraySet
- TreeSet
- ConcurrentSkipListSet
- 정렬된 순서 유지. Comparator 사용 가능
- ConcurrentSkipListSet
- HashSet
- Map
- HashMap
- ConcurrentHashMap
- TreeMap
- ConcurrentSkipListMap
- 정렬된 순서 유지. Comparator 사용 가능
- ConcurrentSkipListMap
- HashMap
- Queue
- ConcurrentLinkedQueue
- 동시성 큐. 비차단 (Non-blocking) 큐
- ConcurrentLinkedQueue
- Deque
- ConcurrentLinkedDeque
- 동시성 데크. 비차단 (Non-blocking) 큐
- ConcurrentLinkedDeque
LinkedHashSet/Map처럼 입력 순서를 유지하는 동시에 멀티 스레드 환경에서 사용할 수 있는 구현체는 제공하지 않는다. 필요하면 Collections.synchronized~ 메서드를 사용해야 한다
스레드 차단 큐
- BlockingQueue
- ArrayBlockingQueue
- 크기 고정 차단 큐
- 공정 모드 사용 가능 (성능 저하)
- LinkedBlockingQueue
- 크기가 무한하거나 고정된 차단 큐
- PriorityBlockingQueue
- 우선순위가 높은 요소를 먼저 처리한느 차단 큐
- SynchronousQueue
- 데이터를 저장하지 않는 차단 큐
- 생산자가 데이터를 추가하면 소비자가 데이터를 받을 때 대기한다
- 생산자-소비자 간의 직접적인 Hand off 메커니즘 제공
- 중간에 큐 없이 생산자, 소비자가 직접 거래한다
- 생산자가 생산하면 대기한다(Block). 소비자가 큐에 있는 것을 요청하면 큐가 아닌 생산자가 바로 전달
- 생산자와 소비자를 동기화하는 큐
- DelayQueue
- 지연된 요소를 처리하는 차단 큐
- 각 요소는 지정된 지연시간이 지난 후에 소비할 수 있다
- 일정 시간이 지난 후 작업을 처리해야 하는 스케줄링 작업에 사용된다
- ArrayBlockingQueue
https://github.com/venzersiz/learn-java8/tree/master/src/test/java/concurrency/collection
'Java > Concurrency' 카테고리의 다른 글
| Java > Concurrency > 10. Thread pool, Executor framework (0) | 2024.10.14 |
|---|---|
| Java > Concurrency > Atomic operation, CAS (0) | 2024.10.04 |
| Java > Concurrency > 7. Synchronization (0) | 2024.09.23 |
| Java > Concurrency > 6. Memory visibility (0) | 2024.09.13 |
| Java > Concurrency > 3. Thread info (0) | 2024.09.05 |