2013-09-05 39 views
1

我正在閱讀一個在ConcurrentHashMap這裏插入一個鍵值對的實現。解釋concurrentHashmap的put(key,value)方法的下面幾行?

我無法理解以下幾行。

int j = (hash >>> segmentShift) & segmentMask; 
     if ((s = (Segment<K,V>)UNSAFE.getObject   // nonvolatile; recheck 
      (segments, (j << SSHIFT) + SBASE)) == null) // in ensureSegment 
      s = ensureSegment(j); 
     return s.put(key, hash, value, false); 

有人請解釋。

+1

你問'''運算符是什麼? –

+0

我曾經讀過寫過'java.util.concurrent。*'的人是這個世界上最聰明的人之一。我也讀過,他們自己並不完全瞭解'concurrent'包在某些情況下的工作方式以及它的作用。 這樣的答案嗎? – Shark

+0

我知道<< operator。但是,如果你能用言語解釋我們在第二或第三行嘗試做什麼。 – Thinker

回答

1

的方法調用:

UNSAFE.getObject(segments, (j << SSHIFT) + SBASE) 

相當於一個正常的數組訪問segments[j],但很可能更快,因爲它不需要邊界檢查。 SBASE是陣列數據從segments陣列開始的偏移量。 SSHIFT是數組索引標度的日誌,因此j << SSHIFT計算索引j在數組中的原始字節偏移量。