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 内存模型与线程规范》

posted @ 2016-03-29 20:03  壬子木  阅读(96)  评论(0)    收藏  举报