java中的Volatile

1. Volatile的作用

在Java多线程编程中,被Volatile修饰的关键字会对所有线程课件,也就是说他保证了变量的可见性。当一个volatile变量值被一个线程修改额时候,那么另外一个线程也可以读取到被修改后的值。

2. 为什么使用Volatile

如果使用得当,volatile关键字会比synchronized有着更低的使用和执行成本,它不会引起线程上下文的切换和调度。

  1. 实现long/double类型的可见性 (4个字节,赋值时低32位和高32位分别写入)
  2. 防止指令 重排序
  3. 实现变量的可见性

以上2,3 是通过内存屏障(memory barrier)来实现的