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