多线程教程(二十四)CAS+volatile

获取共享变量时,为了保证该变量的可见性,需要使用 volatile 修饰。

它可以用来修饰成员变量和静态成员变量,他可以避免线程从自己的工作缓存中查找变量的值,必须到主存中获取它的值,线程操作 volatile 变量都是直接操作主存。即一个线程对 volatile 变量的修改,对另一个线程可见。

注意

volatile 仅仅保证了共享变量的可见性,让其它线程能够看到最新值,但不能解决指令交错问题(不能保证原子性)

CAS 必须借助 volatile 才能读取到共享变量的最新值来实现【比较并交换】的效果

像上一节介绍的AtomticInteger在方法内部对value进行了volatile修饰。所以不需要额外的volatile修饰。

为什么无锁效率高

无锁情况下,即使重试失败,线程始终在高速运行,没有停歇,而 synchronized 会让线程在没有获得锁的时候,发生上下文切换,进入阻塞。打个比喻

线程就好像高速跑道上的赛车,高速运行时,速度超快,一旦发生上下文切换,就好比赛车要减速、熄火,等被唤醒又得重新打火、启动、加速… 恢复到高速运行,代价比较大

但无锁情况下,因为线程要保持运行,需要额外 CPU 的支持,CPU 在这里就好比高速跑道,没有额外的跑道,线程想高速运行也无从谈起,虽然不会进入阻塞,但由于没有分到时间片,仍然会进入可运行状态,还是会导致上下文切换。

多线程教程(二十四)CAS+volatile相关推荐

  1. 【Visual C++】游戏开发五十七 浅墨DirectX教程二十四 打造游戏GUI界面(二)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/16922703 作者:毛星 ...

  2. Java多线程学习二十四:阻塞队列包含哪些常用的方法?add、offer、put 等方法的区别?

    阻塞队列包含哪些常用的方法,以及 add,offer,put 等方法的区别. 在阻塞队列中有很多方法,而且它们都非常相似,所以非常有必要对这些类似的方法进行辨析,所以本课时会用分类的方式,和你一起,把 ...

  3. C++版本OpenCv教程(二十四)直方图匹配

    直方图均衡化函数可以自动的改变图像直方图的分布形式,这种方式极大的简化了直方图均衡化过程中需要的操作步骤,但是该函数不能指定均衡化后的直方图分布形式.在某些特定的条件下需要将直方图映射成指定的分布形式 ...

  4. SAP UI5 初学者教程之二十四 - 如何使用 OData 数据模型试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...

  5. 单分散PEG之Amino-PEG24-acid;CAS:196936-04-6氨基-二十四聚乙二醇-羧酸

    Amino-PEG24-acid氨基-二十四聚乙二醇-羧酸196936-04-6 中文名称:氨基-二十四聚乙二醇-羧酸 英文名称:Amino-PEG24-acid 分子式:C51H103NO26 分子 ...

  6. 【二十四】springboot使用EasyExcel和线程池实现多线程导入Excel数据

      springboot篇章整体栏目:  [一]springboot整合swagger(超详细 [二]springboot整合swagger(自定义)(超详细) [三]springboot整合toke ...

  7. [系统安全] 二十四.逆向分析之OllyDbg调试INT3断点、反调试、硬件断点与内存断点

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  8. SAP UI5 应用开发教程之六十四 - 基于 OData V4 的 SAP UI5 表格控件如何实现 filter(过滤) 和 sort(排序)功能试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  9. SAP UI5 应用开发教程之五十四 - 如何将本地 SAP UI5 应用配置到本地 Fiori Launchpad 中的试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

最新文章

  1. 【 Notes 】NLS ALGORITHMS of TOA - Based Positioning
  2. linux 检查 文件末尾 是否有空行
  3. html5 模仿布料,基于HTML5 P5.js实现的弹性网格布料
  4. 英语句型之展现问题篇3
  5. 牛客14605 画三角
  6. MyBatis多个接口参数报错:Available parameters are [0, 1, param1, param2], 及解决方法
  7. 简谈百度坐标反转至WGS84的三种思路
  8. java 文件上传 乱码_java中文传值乱码问题的解决方法
  9. python类中变量作用域_说说Python中变量的作用域?
  10. Asp.net core 学习笔记 ( OData )
  11. psftp文件的上传下载
  12. 学渣上手 LaTeX 完成毕业论文
  13. python如何防止代码查重_怎样避免论文代码查重
  14. 土壤类型、土壤质地、土壤养分空间分布
  15. Pearson 相关分析 理论与应用
  16. Android移动开发
  17. Python 获取指定日期是周几 3种方法
  18. 如何关闭计算机自动关机设置方法,电脑自动关机怎么设置(自动关机设置及取消方...
  19. AXI协议详解(1)-协议简介
  20. 罗塞塔石碑1141问题

热门文章

  1. QT中鼠标的绝对位置和相对位置
  2. 经纬度计算距离公式 java_Java计算两点间经纬度距离(两种方式)
  3. Unity资源加载方式
  4. WIndows无法连接共享打印机,错误码:0x0000011b
  5. AfxMessageBox和MessageBox的用法
  6. Hadoop2.X—快速部署,一睹HDFS的芳容
  7. 一定要记住这20种PS技术,让你的照片美的不行! - imsoft.cnblogs
  8. Java里的AlertDialog_AlertDialog使用总结
  9. 树莓派开发 --- 交叉编译工具
  10. Atlas 200 DK 环境配置,踩坑与学习记录