我正在阅读java.util.ConcurrentHashMap的源代码,并发现ConcurrentHashMap $ HashEntry中的next
字段是最终的。有两种操作可以修改next
的值:添加和删除。但即使next
字段不是最终字段,这两个操作也可以安全地完成。所以我不明白为什么next
字段是最终的,谁能告诉我为什么?感谢。
答案 0 :(得分:1)
final
上的next
需要确保读取线程看到字段的初始化值,因为({1}}的(大多数)读取在没有同步的情况下发生。
请注意,例如,ConcurrentHashMap
不是value
,因此读取线程可以在该字段中看到未初始化的值(final
),并且必须在同步下重新检查它在那种情况下:
null