可见性
- CPU计算数据由于从内存中读取数据过慢,于是在CPU内部建立了L1,L2,L3三级缓存来直接让CPU从自身的缓存中读取数据。从而提高计算速度。
- 每一个线程有自己单独的CPU三级缓存,遵循MESI协议
解决可见性的方法
- 使用volatile关键字
- volatile的内存语义
- 针对volatile属性被写入,JMM会将当前线程的CPU缓存的数据及时刷新到主内存中
- 针对volatile属性被读出,JMM会将当前线程CPU中的缓存置为无效,需要从主内存中重新获取值
- 使用synchronized锁
添加在这里是会失败的得不到预期的效果。
- 使用Lock锁
- Lock锁的实现是基于volatile实现,在内部进行加锁和释放锁,对一个由volatile修饰的state变量做加减操作。
-
- final关键字实现
final修饰的属性不能被修改