并发编程的三大特性之可见性

77 阅读1分钟

可见性

  • CPU计算数据由于从内存中读取数据过慢,于是在CPU内部建立了L1,L2,L3三级缓存来直接让CPU从自身的缓存中读取数据。从而提高计算速度。
  • 每一个线程有自己单独的CPU三级缓存,遵循MESI协议 在这里插入图片描述

解决可见性的方法

  • 使用volatile关键字 在这里插入图片描述

  • volatile的内存语义

  • 针对volatile属性被写入,JMM会将当前线程的CPU缓存的数据及时刷新到主内存中

  • 针对volatile属性被读出,JMM会将当前线程CPU中的缓存置为无效,需要从主内存中重新获取值

  • 使用synchronized锁 添加在这里是会失败的得不到预期的效果。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

  • 使用Lock锁

  • Lock锁的实现是基于volatile实现,在内部进行加锁和释放锁,对一个由volatile修饰的state变量做加减操作。

  • 在这里插入图片描述

在这里插入图片描述

  • final关键字实现 final修饰的属性不能被修改