반응형
자바의 ConcurrentHashMap 및 Hashtable
이 질문에 이미 답변이 있습니다.
Java에서 ConcurrentHashMap과 Hashtable의 차이점은 무엇입니까?
스레드 응용 프로그램에 더 효율적인 것은 무엇입니까?
ConcurrentHashMap
여러 버킷을 사용하여 데이터를 저장합니다. 이렇게하면 읽기 잠금이 방지되고 HashTable
. 둘 다 스레드로부터 안전하지만 ConcurrentHashMap
.
ConcurrentHashMap
using 에서 읽을 때 모든 작업이 단순히 동기화되는 get()
것과 달리 잠금이 없습니다 HashTable
. HashTable
Java의 이전 버전에서 릴리스되었지만 ConcurrentHashMap
Java 5 이상입니다.
HashMap
단일 스레드 응용 프로그램에서 사용하는 것이 가장 좋습니다.
ConcurrentHashMap 및 Hashtable 잠금 메커니즘
Hashtable
컬렉션 프레임 워크에 속합니다.ConcurrentHashMap
Executor 프레임 워크에 속합니다.Hashtable
전체 데이터에 대해 단일 잠금 을 사용 합니다. 객체 수준 즉 whole 대신 세그먼트 수준 (기본적으로 16)에서 다중 잠금 을ConcurrentHashMap
사용합니다 .Map
ConcurrentHashMap
잠금은 업데이트에만 적용됩니다. 검색의 경우 완전한 동시성을 허용하고 검색은 가장 최근에 완료된 업데이트 작업의 결과를 반영합니다. 따라서 쓰기가 잠금으로 수행되는 동안 읽기가 매우 빠르게 발생할 수 있습니다.ConcurrentHashMap
ConcurrentModificationException
한 스레드가 수정을 시도하는 동안 다른 스레드가 반복하고 null 값을 허용하지 않는 경우 에는 던지지 않습니다.ConcurrentHashMap
를 반환합니다Iterator
. 이는 동시 수정시 실패로부터 안전합니다 (즉, 반복기가 내부 데이터 구조의 복사본을 만듭니다).ConcurrentHashMap
는 동시성 수준Segment<K, V>[] segments
으로 알려진 데이터베이스 샤드 로직 ( )을 사용합니다 . 즉, 전체 데이터 ( )에 대해 단일 잠금을 설정하는 대신 각 샤드 (세그먼트)에 잠금을 설정하는 것보다 데이터를 샤드 (세그먼트)로 분할합니다 . 기본값은 16입니다.Map
ConcurrentHashMap을 더 기술적으로 이해하려면이 링크를 참조 하십시오.
다음 비유는 논리가 아닌 개념을 이해하는 데 도움이됩니다.
- 가정
Hashtable
및ConcurrentHashMap
가정의 두 가지 종류가 있습니다. Hashtable
집의 정문을 잠급니다.ConcurrentHashMap
정문 대신 특정 방 문을 잠급니다.
스레드 응용 프로그램에 더 효율적인 것은 무엇입니까?
ConcurrentHashMap
스레드 응용 프로그램에 더 효율적입니다.
참고 URL : https://stackoverflow.com/questions/12646404/concurrenthashmap-and-hashtable-in-java
반응형
'Program Tip' 카테고리의 다른 글
ConfigParser.items ( '')를 사전으로 변환 (0) | 2020.12.02 |
---|---|
.NET의 String.Format에 해당하는 Java (0) | 2020.12.02 |
컬 오류 60, SSL 인증서 문제 : 인증서 체인의 자체 서명 된 인증서 (0) | 2020.12.02 |
자바 스크립트 사용을 위해 C #의 이스케이프 따옴표 (0) | 2020.12.02 |
Python에서 문자열 찾기의 예 (0) | 2020.12.02 |