为什么ConcurrentHashMap $ HashEntry中的“next”字段是final

时间:2011-07-11 09:27:02

标签: java concurrenthashmap java.util.concurrent

我正在阅读java.util.ConcurrentHashMap的源代码,并发现ConcurrentHashMap $ HashEntry中的next字段是最终的。有两种操作可以修改next的值:添加和删除。但即使next字段不是最终字段,这两个操作也可以安全地完成。所以我不明白为什么next字段是最终的,谁能告诉我为什么?感谢。

1 个答案:

答案 0 :(得分:1)

final上的next需要确保读取线程看到字段的初始化值,因为({1}}的(大多数)读取在没有同步的情况下发生。

请注意,例如,ConcurrentHashMap不是value,因此读取线程可以在该字段中看到未初始化的值(final),并且必须在同步下重新检查它在那种情况下:

null