一.volatile:
1.内存可见性
2.非原子性
使用内存屏障来保证不能指令重排
安全使用volatile:
- 运算结果不依赖于volatile变量的当前值,或者能保证只有单一线程能修改变量的值
- 变量不需要与其它的状态变量共同参与不变性
2.final关键字:
可以修饰方法,变量,类
修饰变量:
其中类常量必须在声明时初始化,final成员常量可以在构造函数初始化;本地变量必须在声明时赋值。 因为没有初始化的过程;在匿名类中所有变量都必须是final变量;接口中声明的所有变量本身是final的。类似于匿名类
修饰方法:
子类不能重写,和类静态绑定
修饰类:
不能被继承,方法自动为final属性
final优点:静态绑定提高性能;final变量自动线程安全;final类对象为只读,天然线程安全。
两个重排序规则:
- 初次读一个包含final域的对象的引用和随后初次写这个final域,不能重拍序。
- 在构造函数内对final域写入,随后将构造函数的引用赋值给一个引用变量,操作不能重排序