CAS原理与JUC原子类

ops/2024/9/24 1:16:38/

一、CAS基本原理

1、Unsafe类

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

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

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

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

2、CAS

(1)比较并交换 CompareAndSwap

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

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

java">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.ppmy.cn/ops/52675.html

相关文章

ThreeJS-截屏下载pdf或者图片时白屏

JS-页面截图下载为pdf 关于如何下载为 pdf 在上面的这篇文章中有写,大家可以看下,下载图片代码在最下面 这时我们发现 three 部分是空白的如下: 这就多少有点尴尬了,这时我们习惯性的看下后台报错 是不是发现了惊喜,…

数据收集和数据分析

数据分析和收集是一个多步骤的过程,涉及到不同的方法和思维构型。 以下是一些常见的数据收集方法和数据分析的思维模式: ### 数据收集方法: 1. **调查问卷**: 通过设计问卷来收集定量或定性数据。(质量互变规律里面…

模板方法模式和命令模式

文章目录 模板方法模式1.引出模板模式1.豆浆制作问题2.基本介绍3.原理类图 2.豆浆制作代码实现1.类图2.SoyaMilk.java 豆浆的抽象类3.PeanutSoyaMilk.java 花生豆浆4.RedBeanSoyaMilk.java 红豆豆浆5.Client.java6.结果 3.钩子方法1.基本介绍2.代码实现1.SoyaMilk.java 添加钩子…

mysql数据库管理

查看数据库结构 Mysql是一套数据库管理系统,在每台Mysql服务器中,支持运行多个数据库每一个数据库相当一个容器 1:查看数据库结构 [rootlocalhost ~]# mysql -u root -ppwd123mysql> show databases;mysql> use mysqlmysql> show…

【Linux】进程信号_1

文章目录 八、进程信号1.信号 未完待续 八、进程信号 1.信号 信号和信号量之间没有任何关系。信号是Linux系统提供的让用户/进程给其他进程发送异步信息的一种方式。 常见信号: 当信号产生时,可选的处理方式有三种:①忽略此信号。②执行该…

STM32学习-HAL库 串口通信

学完标准库之后,本来想学习freertos的,但是看了很多教程都是移植的HAL库程序,这里再学习一些HAL库的内容,有了基础这里直接学习主要的外设。 HAL库对于串口主要有两个结构体UART_InitTypeDef和UART_HandleTypeDef,前者…

TIM: A Time Interval Machine for Audio-Visual Action Recognition

标题:TIM:一种用于视听动作识别的时间间隔机器 源文链接:openaccess.thecvf.com/content/CVPR2024/papers/Chalk_TIM_A_Time_Interval_Machine_for_Audio-Visual_Action_Recognition_CVPR_2024_paper.pdfhttps://openaccess.thecvf.com/cont…

基于jeecgboot-vue3的Flowable流程-自定义业务表单处理(一)支持同一个业务多个关联流程的选择支持

因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。 这部分先讲讲支持自定义业务表单一个业务服务表单多个流程的支持处理 1、后端mapper部分 如下,修改selectSysCustomFormByServiceName为list对象,以便支持多个 &…