Happens-before 内存模型
1、final 字段的语义
1.1、final 字段只初始化一次且不再改变。这种语义既允许编译器在读取这类字段时进行激进优化,还可以用来保证在不需要同步时不可变对象的线程安全。
1.2、final 字段的值不会变化。编译器不应该因为获得了一个锁,读取了一个 volatile 变量或调用了一个未知方法而重新加载一个 final 字段。
1.3、如果一个对象仅包含 final 字段且在构建期间没有对其他线程可见,应当视作不可变的,即使这类对象的引用在线程间传递时存在数据争用。
1.4、如果一个对象在初始构建时,该对象的引用与其他线程共享了,那么该对象的 final 字段的大部分保证都会失效;这包括程序的其他部分继续使用该字段的原始值的场景。
1.5、
[参考文献]
《Java Memory Model and Thread Specification》:
《java 内存模型与线程规范》

浙公网安备 33010602011771号