CAS 是 compare and swap 的缩写,即我们所说的比较交换。

cas 是一种基于锁的操作,而且是乐观锁。在 java 中锁分为乐观锁和悲观锁。悲观锁是将资源锁住,等一个之前获得锁的线程释放锁之后,下一个线程才可以访问。而乐观锁采取了一种宽泛的态度,通过某种方式不加锁来处理资源,比如通过给记录加 version 来获取数据,性能较悲观锁有很大的提高。

CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存地址里面的值和 A 的值是一样的,那么就将内存里面的值更新成 B。CAS是通过无限循环来获取数据的,若果在第一轮循环中,a 线程获取地址里面的值被b 线程修改了,那么 a 线程需要自旋,到下次循环才有可能机会执行。

java.util.concurrent.atomic 包下的类大多是使用 CAS 操作来实现的( AtomicInteger,AtomicBoolean,AtomicLong)。

最新文章

  1. de4dot3.14更新文件打包下载
  2. mysql通用包安装
  3. Codeforces Round #242 (Div. 2) C. Magic Formulas
  4. Mac系统安装jdk和maven
  5. poj 2348
  6. OFBIZ文章
  7. Blob未完成(待优化)
  8. QQ音乐API分析记录
  9. html5画图和本地存储
  10. 使用java API操作hdfs--拷贝部分文件到hdfs
  11. 201521123030 《Java程序设计》 第14周学习总结
  12. [Scikit-learn] 1.2 Dimensionality reduction - Linear and Quadratic Discriminant Analysis
  13. Android 安全加密
  14. 对N各集合中的任意元素进行排列组合问题
  15. python基础-函数(9)
  16. 【python小练】0017-将xls文件内容写入xml文件中
  17. Flask----基础
  18. HttpServletRequestWrapper
  19. 使用阿里云Python SDK管理ECS安全组
  20. ECCV 2018 | 旷视科技提出GridFace:通过学习局部单应变换实现人脸校正

热门文章

  1. 神奇!这款 Vue 后台框架居然不用手动配置路由
  2. jmeter获取当前时间、时间运算、时间比较、时间转换
  3. 用python写九九乘法表
  4. 【C# IO 操作】使用StringWriter和StringReader的好处
  5. 《Symfony 5全面开发》教程01、Symfony介绍
  6. Android系统编程入门系列之硬件交互——无线通信WLAN
  7. iOS实现组件录屏视频不可见,用户肉眼可见(类似系统键盘效果)
  8. Oracle数据库工程实训笔记
  9. LeetCode-028-实现 strStr()
  10. C#控制台窗口禁用关闭按钮