JVM如何处理最终变量?
答案 0 :(得分:6)
JVM规范中至少有一节关于final
对内存模型的影响,对于多线程代码来说非常重要:
final
个字段允许"safe publication":
final
字段必须对所有线程可见。final
引用访问的任何对象上的字段也保证至少与构造函数退出时一样最新。final
并且是基元或对不可变对象的引用的对象)。阅读"有效不可变"也是安全的。对象(其字段实际上不是final
,但实际上永远不会更改)通过final
引用。final
,那么您必须通过其他方式提供线程安全性。 但请注意,JVM并未强制实际终结:您可以使用反射重新分配值(这当然会破坏安全发布)。