Program Tip

자바의 ConcurrentHashMap 및 Hashtable

programtip 2020. 12. 2. 21:47
반응형

자바의 ConcurrentHashMap 및 Hashtable


Java에서 ConcurrentHashMap과 Hashtable의 차이점은 무엇입니까?

스레드 응용 프로그램에 더 효율적인 것은 무엇입니까?


ConcurrentHashMap여러 버킷을 사용하여 데이터를 저장합니다. 이렇게하면 읽기 잠금이 방지되고 HashTable. 둘 다 스레드로부터 안전하지만 ConcurrentHashMap.

ConcurrentHashMapusing 에서 읽을 때 모든 작업이 단순히 동기화되는 get()것과 달리 잠금이 없습니다 HashTable. HashTableJava의 이전 버전에서 릴리스되었지만 ConcurrentHashMapJava 5 이상입니다.

HashMap 단일 스레드 응용 프로그램에서 사용하는 것이 가장 좋습니다.


ConcurrentHashMap 및 Hashtable 잠금 메커니즘

  • Hashtable컬렉션 프레임 워크에 속합니다. ConcurrentHashMapExecutor 프레임 워크에 속합니다.
  • Hashtable전체 데이터에 대해 단일 잠금사용 합니다. 객체 수준 즉 whole 대신 세그먼트 수준 (기본적으로 16)에서 다중 잠금ConcurrentHashMap사용합니다 .Map
  • ConcurrentHashMap잠금은 업데이트에만 적용됩니다. 검색의 경우 완전한 동시성을 허용하고 검색은 가장 최근에 완료된 업데이트 작업의 결과를 반영합니다. 따라서 쓰기가 잠금으로 수행되는 동안 읽기가 매우 빠르게 발생할 수 있습니다.
  • ConcurrentHashMapConcurrentModificationException한 스레드가 수정을 시도하는 동안 다른 스레드가 반복하고 null 값을 허용하지 않는 경우 에는 던지지 않습니다.
  • ConcurrentHashMap를 반환합니다 Iterator. 이는 동시 수정시 실패로부터 안전합니다 (즉, 반복기가 내부 데이터 구조의 복사본을 만듭니다).
  • ConcurrentHashMap동시성 수준Segment<K, V>[] segments 으로 알려진 데이터베이스 샤드 로직 ( )을 사용합니다 . 즉, 전체 데이터 ( )에 대해 단일 잠금을 설정하는 대신 각 샤드 (세그먼트)에 잠금을 설정하는 것보다 데이터를 샤드 (세그먼트)로 분할합니다 . 기본값은 16입니다.Map

ConcurrentHashMap을 더 기술적으로 이해하려면이 링크를 참조 하십시오.

다음 비유는 논리가 아닌 개념을 이해하는 데 도움이됩니다.

  • 가정 HashtableConcurrentHashMap가정의 두 가지 종류가 있습니다.
  • Hashtable 집의 정문을 잠급니다.
  • ConcurrentHashMap 정문 대신 특정 방 문을 잠급니다.

스레드 응용 프로그램에 더 효율적인 것은 무엇입니까?

ConcurrentHashMap 스레드 응용 프로그램에 더 효율적입니다.

참고 URL : https://stackoverflow.com/questions/12646404/concurrenthashmap-and-hashtable-in-java

반응형