voliate的三个特点
1.可见性:一个线程修改了voliate修饰的值后,对于其他线程可见;
2.有序性:保证临界区代码执行有序性;
3.受限原子性:不保证原子性。
voliate 如何实现线程安全
- 实现变量可见性
- 进制指令重排序
voliate读写过程
读:当一个线程读取被voliate修饰的值时,JVM将本地设置无效,从主内存读取共享变量
写:当一个线程修改voliate修饰的值时,JVM将本地内存刷新到主内存
voliate可见性底层原理
借用了CPU的lock指令
1.写voliate时,处理器将缓存写回主内存
2.一个处理器缓存写回到主内存导致其他处理器缓存失败
基于CPU缓存一致性协议,JVM实现了voliate可见性,但由于总线嗅探机制,不断监听总线,大量使用voliate会引起总线风暴。