java关键字

123 阅读1分钟

一.volatile:

1.内存可见性

2.非原子性

使用内存屏障来保证不能指令重排

安全使用volatile:

  • 运算结果不依赖于volatile变量的当前值,或者能保证只有单一线程能修改变量的值
  • 变量不需要与其它的状态变量共同参与不变性

2.final关键字:

可以修饰方法,变量,类

修饰变量:

其中类常量必须在声明时初始化,final成员常量可以在构造函数初始化;本地变量必须在声明时赋值。 因为没有初始化的过程;在匿名类中所有变量都必须是final变量;接口中声明的所有变量本身是final的。类似于匿名类

修饰方法:

子类不能重写,和类静态绑定

修饰类:

不能被继承,方法自动为final属性

final优点:静态绑定提高性能;final变量自动线程安全;final类对象为只读,天然线程安全。

两个重排序规则:

  1. 初次读一个包含final域的对象的引用和随后初次写这个final域,不能重拍序。
  2. 在构造函数内对final域写入,随后将构造函数的引用赋值给一个引用变量,操作不能重排序