volatile

37 阅读1分钟

内存可见性

  • 当一个线程对volatile修饰的变量进行写操作JMM会立即把该线程对应的本地内存中的共享变量的值刷新到主内存。
  • 当一个线程对volatile修饰的变量进行读操作的时候,JMM会立即把本地内存的共享变量置为无效,从主存中读取共享变量的值。

禁止重排序

被volatile修饰的关键字可以保证变量的可见性以及禁止对此变量的指令重排序(关于这个变量的代码之前的代码必定在这个变量的代码之前执行,关于这个变量的代码之后的代码必定在这个变量的代码之后执行),但是volatile依旧不能保证线程安全问题,原因在于它不能保证作用于变量的代码是原子操作。