ConcurrentHashMap에는 기본적으로 ReentrantLock을 확장하는 세그먼트가 있습니다.concurrenthashmap의 재진입 잠금은 선택적 "fairness"매개 변수를 사용합니까?
static final class Segment<K,V> extends ReentrantLock implements Serializable
이 ReentrantLock와는 공정성 속성의 사용합니까?
public ReentrantLock(boolean fair) {
sync = fair ? new FairSync() : new NonfairSync();
}
그래서 스레드 T1이 ConcurrentHashMap의의 파티션에 잠금 장치를 읽기 다른 두 개의 스레드 T2와 T3 읽기 기다리고 있습니다와 동일한 파티션에 각각 잠금을 쓰기 말할 수 있습니다. 그래서 어떤 사람 (t2 또는 t3)이 일단 잠금을 해제하면 잠금을 획득하게됩니다.
공정성이 true로 설정되면 내 지식에 따라 가장 길게 기다리는 사람이 될 것입니다. 하지만 동시 HashMap의 경우 true로 설정되어 있습니까? 어떤 스레드가 다음 잠금을 얻는 지 확실하게 말할 수 없다면? ConcurrentHashMap의 소스 코드에서
제가 아는 한 ConcurrentHashMap은 읽기를 잠그지 않습니다. – sanbhat
몇 가지 사소한 경우를 제외하고는 그렇지 않습니다. 제 요점은 이것이 부적절한 데이터로 이끌지 않을 것입니까? putAll() 연산을 수행하고 연산을 읽는다 고 가정 해 봅시다. putAll()에 의한 모든 변경이, 다른 thread에 의한 후속의 읽기에 반영 될까. –