क्या concurrenthashmap में प्रवेश ताला यह वैकल्पिक "निष्पक्षता" पैरामीटर का उपयोग करता है?-जावा, तुल्यकालन, concurrenthashmap

ConcurrentHashMap में हमारे पास सेगमेंट हैं जो मूल रूप से ReentrantLock का विस्तार करते हैं।

static final class Segment<K,V> extends ReentrantLock implements Serializable

क्या यह ReentrantLock इसकी निष्पक्षता संपत्ति का उपयोग करता है?

public ReentrantLock(boolean fair) {
sync = fair ? new FairSync() : new NonfairSync();
}

तो मान लें कि थ्रेड टी 1 ने लॉक को पढ़ा हैConcurrentHashMap का विभाजन और एक और दो धागे t2 और t3 क्रमशः उसी विभाजन पर पढ़ने और लिखने के लिए प्रतीक्षा कर रहे हैं। तो टी 1 एक बार लॉक जारी करने के बाद कौन सा एक (टी 2 या टी 3) लॉक प्राप्त करेगा।

मेरे ज्ञान के अनुसार यह वह होगा जो हैनिष्पक्षता को सही होने पर सबसे लंबे समय तक इंतजार करना। लेकिन क्या यह समवर्ती हैश मैप के मामले में सच साबित हुआ है? अगर हम किसी भी निश्चितता के साथ नहीं कह सकते कि थ्रेड अगले लॉक को प्राप्त करेगा?

उत्तर:

उत्तर № 1 के लिए 4

ConcurrentHashMap स्रोत कोड से हम देख सकते हैं कि यह ReentrantLock के उप-वर्ग का उपयोग करता है

static final class Segment<K,V> extends ReentrantLock
...
Segment(float lf, int threshold, HashEntry<K,V>[] tab) {
this.loadFactor = lf;
this.threshold = threshold;
this.table = tab;
}
...

जैसा कि हम देख सकते हैं कि इसका एकमात्र कन्स्ट्रक्टर पूरी तरह से ReentrantLock के नो-Args कन्स्ट्रक्टर को कॉल करता है जो एक गैर-निष्पक्ष लॉक बनाता है। इसका मतलब है ConcurrentHashMap के ताले हमेशा गैर-निष्पक्ष होते हैं


संबंधित सवाल
सबसे लोकप्रिय