Java中ConcurrentHashMap的节点HashEntry 中元素为什么要定义成final的?

static final class HashEntry<K,V> {
    final K key;
    final int hash;
    volatile V value;
    final HashEntry<K,V> next;
}

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

阅读 4.8k
1 个回答

当发生hash冲突的时候,才会用到链表解决冲突,但是hash冲突的概率很小,map还会自动扩容减少冲突。

对于使用final,java编译器会保证在读final域之前一定被写入过,即保证写在读之前发生,避免多线程并发条件下出现读后写,读到非预期的值。

传送门:java内存模型 final

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题