当前位置: 首页 > news >正文

CAS原理与JUC原子类

一、CAS基本原理

1、Unsafe类

(1)概念及作用:增强Java语言操作底层资源的能力,里面的方法多为native修饰的方法(基于C++实现),不建议在代码中使用,不安全。

(2)底层原理:Unsafe类提供的CAS方法,直接通过native方式(通过指针直接操作内存),调用了底层的CPU指令cmpxchg(原子指令)。

(3)使用:类被final修饰,构造方法是私有的,因此不能外部实例化,只能通过反射调用。

Field theUnsafe=Unsafe.class.getDeclaredField("theUnsafe");
//private static final Unsafe theUnsafe; 

2、CAS

(1)比较并交换 CompareAndSwap

CAS(字段内存位置,预期值,新值)

取出内存位置的值,与预期值比较,若相同则设置为新值

do{
获得字段的预期值(oldValue)
计算出需要替换的新值(newValue)
}while(!CAS(内存地址,oldValue,newValue))
//注意oldValue的值在不断的更新

二、JUC原子类

(1)AtomicXXX

具体例子:

JUC并发编程DAY08-CSDN博客

(2)存在的问题:

ABA问题

1线程操作变量A,2线程修改为B,在1线程发现前又修改为A。

三、LongAdder

以空间换时间、热点分离

将value值分离成一个数组,获取最终的value时,则将数组的元素求和。

http://www.lryc.cn/news/383933.html

相关文章:

  • 【杂记-浅谈OSPF协议之RouterDeadInterval死区间隔】
  • 【每日刷题】Day75
  • 文件管理器加载缓慢-禁用文件类型自动发现功能
  • .[nicetomeetyou@onionmail.org].faust深入剖析勒索病毒及防范策略
  • Ardupilot开源代码之ExpressLRS性能实测方法
  • Transformers是SSMs:通过结构化状态空间对偶性的广义模型和高效算法(二)
  • Segment any Text:优质文本分割是高质量RAG的必由之路
  • IDEA 学习之 编译内存问题
  • 如何将本地项目推送到gitee仓库
  • 产品经理基础入门
  • 五子棋纯python手写,需要的拿去
  • C# Winform按钮避免重复点击以及解决WinForm中设置Enabled=False为什么还会响应Click事件
  • 谷歌SEO是什么意思?
  • IPFoxy Tips:匿名海外代理IP的使用方法及注意事项
  • 【MySQL进阶之路 | 小结篇】MySQL键约束KEY与索引INDEX
  • 【中学教资科目二】02中学课程
  • Stable Diffusion 亲测这几个SDXL大模型,真的非常好用!
  • DLS策略洞察:如何应对AI数据中心网络交换机市场的爆发式增长?
  • 数据仓库架构设计
  • EasyExcel动态表头多sheet录入,单元格操作样式,自动修改单元格格式
  • Linux的设备模型
  • 初始化一个Android项目时,Android Studio会自动生成一些文件和目录结构,以帮助你快速上手开发
  • 社区团购小程序开发
  • 数据分析python基础实战分析
  • 英语笔记-专升本
  • 什么野指针(c++)
  • 【编译原理】绪论
  • 优化Docker部署:解决Java应用ExcelGenerateException并提速镜像构建
  • 你了解RabbitMQ、RocketMQ和Kafka吗?
  • python实现可视化大屏(django+pyechars)