Java中ConcurrentHashMap的节点HashEntry 中元素为什么要定义成final的?
大家讲道理
大家讲道理 2017-04-17 16:13:32
0
1
833
static final class HashEntry<K,V> {
    final K key;
    final int hash;
    volatile V value;
    final HashEntry<K,V> next;
}

这样导致在remove节点的时候,需要将remove节点的前面节点全部复制一遍,真的好吗?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(1)
巴扎黑

當發生hash衝突的時候,才會用到鍊錶解決衝突,但是hash衝突的機率很小,map還會自動擴容減少衝突。

對於使用final,java編譯器會保證在讀final域之前一定被寫入過,即保證寫在讀之前發生,避免多線程並發條件下出現讀後寫,讀到非預期的值。

傳送門:java記憶體模型 final

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板