首页 > 其他分享 >CAS 和 原子类

CAS 和 原子类

时间:2023-05-16 10:25:09浏览次数:35  
标签:synchronized CAS ShopDto 原子 volatile shopDto1

什么是 CAS

  • 全称是 Compare-And-Swap,对数据进行 原子性 操作,sun.misc.Unsafe 类的各个 native 方法实现的
  • 比较当前工作内存中的值和主内存中的值,如果相同则执行规定操作,否则什么都不做或者重来一次,重来就是自旋锁了 java各种锁看这里

CAS VS volatile VS synchronized

  • CAS:保证原子性
  • volatile:保证可见性和有序性
  • synchronized:保证原子性、可见性和有序性

volatile+CAS 可以做到 synchronized 做的事儿,意味着不需要 synchronized 这个重量级锁也能保证线程安全了
原子类是线程安全的,底层就是使用的 volatile+CAS

原子类

java.util.concurrent.atomic 包下很多已经封装好的原子类(long、int、布尔、数组等)

AtomicInteger atomicInteger = new AtomicInteger(1);
// 这里其实有三个步骤,获取原来的值、比较、赋新值;这个过程是原子性的,没有用 synchronized,底层调用了 Unsafe 的方法
atomicInteger.compareAndSet(1, 2);
atomicInteger.compareAndSet(3, 4);

原子引用类

java.util.concurrent.atomic 下除了提供基本数据类型的原子类,还提供了原子引用类 AtomicReference,用于封装自定义对象

AtomicReference<ShopDto> shopDtoAtomicReference = new AtomicReference<>();
ShopDto shopDto1 = new ShopDto();
shopDto1.setId(1L);
ShopDto shopDto2 = new ShopDto();
shopDto2.setId(2L);
shopDtoAtomicReference.set(shopDto1);
shopDtoAtomicReference.compareAndSet(shopDto1, shopDto2);

标签:synchronized,CAS,ShopDto,原子,volatile,shopDto1
From: https://www.cnblogs.com/hangychn/p/17397307.html

相关文章

  • element-plus + VUE3 项目 build 之后 el-cascader无法选中而且导致整个网页卡顿
    cascader不能用v-model接收值,需要改为model-value方式<el-cascadermodel-value="selRegion":options="RegionTreeCascader":show-all-levels="true"separator="-":props="{checkStrictly:true,expandTrigger:'hove......
  • CAS Server 搭建
    1、CASServer下载,我这里选择了5.3的版本,下载地址https://github.com/apereo/cas-overlay-template/tree/5.32、HTTPS证书生成,我是用JDK自带的keytool工具生成的,进入JDK安装目录,在bin目录下打开cmd,输入以下命令行就可以生成证书了keytool-genkey-aliascasserver-keya......
  • OpenCASCADE曲面求交之网格离散法1
    OpenCASCADE曲面求交之网格离散法[email protected] 1Introduction由朱心雄等著《自由曲线曲面造型技术》书中对曲面求交之网格离散法描述如下:该法的基本思想是先将曲面离散为由小平面片组成的网格,当网格足够密时,可以认为已经非常接近真实曲面,对分别表示不同曲面的两张网格,利用......
  • 正余弦优化算法(SCA)文章复现(非线权重改进位置更新+Levy飞行扰动策略+ABC算法思想)—
    正余弦优化算法(SCA)文章复现(非线权重改进位置更新+Levy飞行扰动策略+ABC算法思想)——SCASL复现内容包括:文章改进SCA算法实现、23个基准测试函数、文中相关因子分析、与SCA对比等。代码基本上每一步都有注释,非常易懂,代码质量极高,便于新手学习和理解。ID:23596702235796......
  • Cassandra HBase和MongoDB性能比较
    这是一篇基于亚马逊云平台上对三个主流的NoSQL数据库性能比较,在读写两个操作不同的组合情况下性能表现不同。横坐标是吞吐量,纵坐标是延迟,这是一对矛盾,吞吐量越大,延迟越低,代表越好。1.纯粹插入,Cassandra领先,见下图:2.WorkloadA:读修改操作各占一半情况下的修改性能:MongoDB明显延迟......
  • 多线程篇-线程安全-原子性、可见性、有序性解析
    在程序中使用多线程的目的是什么?1、提高效率,增加任务的吞吐量2、提升CPU等资源的利用率,减少CPU的空转多线程的应用在日常开发中很多,带来了很多的便利,让我们以前研究下在多线程场景中要注意问题吧,一般主要从这三个方面考虑1、原子性2、可见性3、有序性如果不能保证原......
  • httprunner 4.x学习 - 12. 测试用例引用前面一个用例testcase
    前言当登录用例写完后,后面想继续写其他用例,可以导入前面的login用例,当成下个用例的步骤使用导入前一个用例之前,需先export导出变量,变成全局变量。登录用例在testcase下新建一个test_login.yml文件,用于测试登录成功接口信息testcase/test_login.ymlconfig:name:测试登......
  • Lucas 定理学习笔记
    一、定理给定\(n,m,p\),\(p\)是质数,求\(C_{m+n}^n\bmodp\),\(n,m\le10^{18},p\le10^6\)。这题可以用Lucas定理求解。Lucas定理:当\(p\)是个质数时,\(\forallm,n\inN,C_n^m\equivC_{\lfloor\frac{n}{p}\rfloor}^{\lfloor\frac{m}{p}\rfloor}\timesC_{n\bmodp}......
  • SoftRAID/FakeRAID hardware. In the first case run chkdsk /f on Windows
    [root@storage1~]#mount/dev/sdj3/mnt/data-dir/ntfs_mst_post_read_fixup_warn:magic:0xffffffffsize:1024usa_ofs:65535usa_count:65535:InvalidargumentRecord16hasnoFILEmagic(0xffffffff)CorruptattributelistentryinMFTrecord0Failedto......
  • requests标头在json序列化时报错TypeError: Object of type CaseInsensitiveDict is n
    requests的作者似乎为了解决header里大小写兼容的问题,而创建了大小写不敏感的数据结构CaseInsensitiveDict,具体分析可以参见:详解Requests中的数据结构CaseInsensitiveDict。requests返回的response_header即是一个CaseInsensitiveDict类型,而且我们知道response_header里通常并非......