Thread-safe Collections

류홍규·2023년 6월 25일
0

JAVA

목록 보기
7/7
post-thumbnail

💎 동기화된 컬렉션

컬렉션 프레임워크의 대부분의 클래스들은 싱글 쓰레드 환경에서 사용할 수 있도록 설계되었다. VectorHashTable은 동기화된(Synchronized) 메서드로 구성되어 있기 때문에 멀티 스레드 환경에서 안전하게 요소를 처리가 가능하다.

  • ArrayList, HashSet, HashMap은 동기화된 메서드로 구성되어 있지 않아, 멀티 스레드 환경에서 안전하지 않다.
  • 이런 경우를 대비해서, 비동기화된 메서드를 동기화된 메서드로 wrapping하는 Collections의 synchronized~ 메서드를 제공하고 있다.
  • Synchronized~ ( 비동기 컬렉션 ) ⇒ 동기화된 컬렉션

💎 synchronized 비동기 컬렉션 메서드

타입메서드(매개변수)
ListsynchronizedList(List list)
MapsynchronizedMap(Map <K, V> map)
SetsynchronizedSet(Set set)

💎 병렬 처리를 위한 컬렉션

대부분의 컬렉션 프레임 워크는 싱글쓰레드 환경에서 사용할 수 있도록 설계되었기 때문에 전체 요소를 빠르게 처리하지 못한다.

Java는 멀티 쓰레드 환경에서 컬렉션의 요소를 병렬적으로 처리할 수 있도록 아래와 같은 컬렉션을 제공한다.

  • ConcurrentHashMap
    • 쓰레드에 안전하면서 멀티 스레드가 해당 요소를 병렬적으로 처리 가능하다.
    • ConcurrentHashMap의 경우 부분 잠금(Segment Locking)을 사용하기 때문이다.
  • ConcurrentLinkedQueue
    • Lock -Free 알고리즘을 구현한 컬렉션이다.
    • 락 프리 알고리즘은 여러 개의 쓰레드가 동시에 접근할 경우 잠금을 사용하지 않고도 최소한 하나의 쓰레드가 안전하게 요소를 저장하거나 얻도록(GET) 해준다.
profile
공대생의 코딩 정복기

0개의 댓글