Java_CAS实现过程
时间:2021-07-21
本文章向大家介绍Java_CAS实现过程,主要包括Java_CAS实现过程使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
CAS
CAS 是指 compare and swap , compare and exchange 比较并且交换
使用 ”synchronized“ 保证线程的安全性,但是效率比较低
在 jdk5 以后增加一些原子类,保证数据的递增,不用加锁
常见的原子类:AtomicBoolean,AtomicInteger,AtomicLong
1.大致实现原理
CAS工作原理:
线程读取到当前的值,计算结果并返回设置到内存,设置时读取内存中的是否跟线程之前读到的值相等,相等的话说明数据没有被修改过,直接把值赋上去,如果不相等的话,再次读取计算再次设置.....直到设置成功。
CAS底层实现:
JVM 虚拟机实现,时使用 C++ 实现的。
ABA问题:
线程再次设置值的时候发现值与自己读取的相等,这时可能经过多个线程的修改,修改之后值没变。这就是ABA问题。
如何避免ABA问题:
- 加上版本号,判断值是否相等,再判断版本号是否一致。
- 加上布尔值,判断是否修改过。
原文地址:https://www.cnblogs.com/coolyang/p/15041000.html
- 在 ASP.NET MVC 中使用异步控制器
- MVC5 Entity Framework学习之异步和存储过程
- ConcurrentDictionary 对决 Dictionary+Locking
- 在ASP.NET 5中使用SignalR
- 避免在ASP.NET Core中使用服务定位器模式
- 直传文件到Azure Storage的Blob服务中
- 闭路电视探头究竟有多不安全?
- windows API 开发飞机订票系统 图形化界面 (四)
- windows API 开发飞机订票系统 图形化界面 (三)
- windows API 开发飞机订票系统 图形化界面 (二)
- SQL SERVER几种数据迁移/导出导入的实践
- dom4j 使用总结
- 快速对表的某字段赋递增的数值
- SQL SERVER修改函数名引起的问题
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Linux Centos7系统端口占用问题的解决方法
- Linux中利用sudo进行赋权的方法详解
- Centos7下用户登录失败N次后锁定用户禁止登陆的方法
- Linux服务器被黑以后的详细处理步骤
- linux下用户程序同内核通信详解(netlink机制)
- yum安装本地rpm软件方案详解
- CentOS 部署 flask项目的方法
- 在linux服务器下使用版本控制软件SVN的方法
- centos中yum命令删除还原的补救方法介绍
- Linux 创建子进程执行任务的实现方法
- Linux系统下安装jdbc与tomcat的图文教程
- Linux系统下利用C程序输出某进程的内存占用信息
- .NET Standard中配置TargetFrameworks输出多版本类库
- .NET Standard SDK 样式项目中的目标框架
- 偿还技术债(2)-EventBus自己实现一个?