Volatile
Volatile的应用
volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”
(可见性指当一个线程修改一个共享变量时,另外一个线程可以读到修改值)。
volatile的定义和实现原理
如果一个字段被声明成volatile,Java线程内存模型所有线程看到这个变量的值是一致的。
有volatile变量修饰的共享变量进行写操作的时,Java代码转换成汇编指令在多核处理器下会发生两件事情:
将当前处理器缓存行的数据写回到系统内存(锁缓存不锁内存)
这个写回内存的操作会使其他在cpu里缓存了该内存地址的数据无效,处理器通过嗅探重新讲内存数据读到缓存中。
注意:为了提高处理效率,处理器不直接操作内存,先将系统内存的数据读到缓存,再操作缓存。
volatile优化
JDK7新增LinkedTransferQueue,使用追加字节的方式来优化队列出队入队的性能。