1. Volatile的作用
在Java多线程编程中,被Volatile修饰的关键字会对所有线程课件,也就是说他保证了变量的可见性。当一个volatile变量值被一个线程修改额时候,那么另外一个线程也可以读取到被修改后的值。
2. 为什么使用Volatile
如果使用得当,volatile关键字会比synchronized有着更低的使用和执行成本,它不会引起线程上下文的切换和调度。
- 实现long/double类型的可见性 (4个字节,赋值时低32位和高32位分别写入)
- 防止指令 重排序
- 实现变量的可见性
以上2,3 是通过内存屏障(memory barrier)来实现的