[CS/운영체제] 멀티스레드와 동시성 - 30부

황제연·2025년 7월 29일
0

CS학습

목록 보기
150/193
post-thumbnail

동시성 컬렉션

자바 1.5부터 동시성 컬렉션이 등장했습니다
동시성 컬렉션은 스레드 세이프를 제공합니다

동시성 컬렉션은 정교한 잠금 메커니즘을 사용해서 동시 접근을 효율적으로 처리하고
필요한 경우 일부 메소드에 대해서만 동기화를 적용하는 등 유연한 동기화 전략을 제공합니다

또한 성능 최적화 기법도 적용되어 있어서 synchronized, Lock(ReentrantLock), CAS,
분할 잠금 기술(segment lock) 등 다양한 방법을 섞어서 정교한 동기화를 구현하면서도
동시에 성능도 최적화했습니다

동시성 컬렉션 종류

List

  • CopyOnWriteArrayList > ArrayList 대안

Set

  • CopyOnWriteArraySet > HashSet 대안
  • ConcurrentSkipListSet > TreeSet의 대안

Map

  • ConcurrentHashMap > HashMap 대안
  • ConcurrentSkipListMap > TreeMap의 대안

Queue

  • ConcurrentLinkedQueue: 동시성 큐, non-blocking 큐

Deque

  • ConcurrentLinkedDeque: 동시성 덱, non-blocking 큐

LinkedHashSet, LinkedHashMap

LinkedHashSet, LinkedHashMap처럼 입력 순서를 유지하면서 멀티스레드 환경에서 사용할 수 있는
Set, Map 구현체는 제공하지 않습니다
이 경우는 필요하면 Collections.synchronized...() 방식을 사용해야 합니다

BlockingQueue

ArrayBlockingQueue

크기가 고정된 블로킹 큐로 공정모드를 사용할 수 있습니다
공정모드를 사용하면 성능이 저하될 수 있습니다

LinkedBlockingQueue

크기가 무한하거나 고정된 블로킹 큐입니다

PriorityBlockingQueue

우선순위가 높은 요소를 먼저 처리하는 블로킹 큐입니다

SynchronousQueue

데이터를 저장하지 않는 블로킹 큐로, 생산자가 데이터를 추가하면 소비가자 데이터를 받을 때까지
대기합니다
생산자 소비자 간의 핸드오프 매커니즘을 제공합니다
즉, 중간에 큐없이 생산자 소비가자 직접 데이터를 거래합니다

DelayQueue

지연된 요소를 처리하는 블로킹 큐로, 원소가 지정한 지연시간이 지난후에 소비될 수 있습니다
일정 시간이 지난 후에 작업을 처리하는 스케줄링 작업에 사용됩니다

참고

  • 김영한의 실전 자바 - 고급 1편
profile
Software Developer

0개의 댓글