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

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

大家讲道理
大家讲道理

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

全員に返信(1)
巴扎黑

ハッシュの競合が発生した場合、競合を解決するためにリンクされたリストが使用されますが、ハッシュの競合が発生する可能性は非常に低く、競合を減らすためにマップが自動的に拡張されます。

final を使用する場合、Java コンパイラは、マルチスレッド同時実行条件下での読み取り後の書き込みや予期しない値の読み取りを避けるために、読み取り前に Final フィールドが書き込まれている必要があることを確認します。つまり、読み取り前に書き込みが行われることを保証します。 。

ポータル:Java メモリ モデルの最終版

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート