wms's Programming&Study

동기화, 비동기화, 컨커런트 컬랙션 본문

Programming/JAVA

동기화, 비동기화, 컨커런트 컬랙션

wms2275 2021. 10. 16. 23:10

동기화, 비동기화, 컨커런트 컬랙션

  • 동기화 컬렉션 ( synchronized Collection )

    • Vector, Hashtable, Collections.synchronizedXXX()로 생성된 컬렉션들

    • 동기화 컬렉션은 하나의 쓰레드가 접근시 다른 쓰레드는 접근 불가

    • 장점
      멀티 스레드 환경에서 하나의 요소를 안전하게 처리하도록 한다. (Thread-safe)

    • 단점

      • 하나의 스레드가 요소를 안전하게 처리하도록 도와주지만
        작업 시 락이 발생하기 때문에 전체 요소를 빠르제 처리하지 못한다. -> 성능 저하

      • Thread Safe하나, 두개 이상의 연산을 묶어서 처리해야 할 때
        외부에서 동기화 처리를 해줘야 한다.

      • 대안
        자바에서 제공하는 컨커런트(병렬) 컬렉션을 사용하도록 한다.

  • 비동기화 컬렉션

    동기화되지 않은(unsynchronized) 컬렉션

  | 컬렉션 종류 | 컬렉션 |
  |---|---|
  | List  | ArrayList, LinkedList |
  |  Map | HashMap    |
  | Set  |   HashSet   |
  | SortedMap  |   TreeMap   |
  | SortedSet  |   TreeSet   |
  • 단점 - Thread Safe하지 않다.
  • 컨커런트 (병렬) 컬렉션 ( Concurrent Collection )

    컬렉션 종류 컬렉션
    List CopyOnWriteArrayList
    Map ConcurrentMap, ConcurrentHashMap
    Set CopyOnWriteArraySet
    SortedMap ConcurrentSkipListMap
    SortedSet ConcurrentSkipListSet
    Queue ConcurrentLinkedQueue
  • Concurrent(병렬) 컬렉션은 Synchronized 컬렉션과 달리 Thread-safe 함은 물론
    보관하고 있는 데이터를 여러 부분으로 나눠서 락을 걸어
    다른 부분에 접근 중이라면 여러 스레드가 동시에 컬렉션에 접근할 수 있다.

출처: https://deepblue28.tistory.com/entry/Java-SynchronizedCollections-vs-ConcurrentCollections [딥블루]
출처 : https://snow-line.tistory.com/127

출처: https://dogcowking.tistory.com/279 [dogcowking]