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

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

可见性

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

解决可见性的方法

  • 使用volatile关键字

  • volatile的内存语义
  • 针对volatile属性被写入,JMM会将当前线程的CPU缓存的数据及时刷新到主内存中
  • 针对volatile属性被读出,JMM会将当前线程CPU中的缓存置为无效,需要从主内存中重新获取值
  • 使用synchronized锁
    添加在这里是会失败的得不到预期的效果。



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

  • final关键字实现
    final修饰的属性不能被修改
目录
相关文章
|
Kubernetes Cloud Native 开发者
《云原生应用开发:Operator原理与实践》电子版地址
本书共分为4章,完整地介绍了 Operator 的开发原理和流程;本书适合云原生爱好者及 Operator 开发者阅读。受篇幅所限,本书并未对 Kubernetes的所有模块均作分析,建议读者与其他 Kubernetes 相关图书配合使用。
795 0
《云原生应用开发:Operator原理与实践》电子版地址
|
计算机视觉
YOLO 目标检测 识别框不显示文字标签(已解决)
YOLO 目标检测 识别框不显示文字标签(已解决)
|
7月前
|
数据采集 机器学习/深度学习 数据挖掘
Python爬虫生成CSV文件的完整流程
Python爬虫生成CSV文件的完整流程
|
SQL 分布式计算 资源调度
Mac安装Spark+Spark基本功能
主要实现的是mac安装spark,spark基本的wordcount代码,spark on yarn
1310 0
|
算法 C++
【软件设计师备考 专题 】数学基础知识:命题逻辑、谓词逻辑、形式逻辑与数值计算
【软件设计师备考 专题 】数学基础知识:命题逻辑、谓词逻辑、形式逻辑与数值计算
320 0
|
存储 Java 调度
Quartz 的启动流程分析
Quartz 的启动流程分析
501 0
|
编译器
分支语句与循环语句题
分支语句与循环语句题
182 0
|
算法 Serverless 计算机视觉
python opencv 图像处理 (十)
python opencv 图像处理 (十)
171 0
|
资源调度 调度
OKCC和VOS两者结合有什么作用?
OKCC和VOS两者结合有什么作用?
|
Web App开发 运维 负载均衡
《企业运维之云上网络原理与实践》——第四章 负载均衡 ALB——配套实验:使用 ALB 实现灰度发布(4)
《企业运维之云上网络原理与实践》——第四章 负载均衡 ALB——配套实验:使用 ALB 实现灰度发布(4)
408 0