【JUC】CAS

news/2024/5/24 12:10:27/

【JUC】CAS

文章目录

  • 【JUC】CAS
    • 1. 概述
    • 2. Unsafe类

1. 概述

在Java并发编程中,CAS是一种非阻塞的算法,即Compare and Swap(比较并交换)。

CAS通过比较内存中某个位置的值和预期值,如果相同,则将该位置的值更新为新值;否则不进行任何操作。(和乐观锁的思想类似)

在多线程并发执行时,如果同时有多个线程尝试更新同一个位置的值,只有一个线程会成功,其他线程会失败,但它们并不会被阻塞,而是可以立即重新尝试(自旋)。

image-20230418231151354

示例代码:

public class CASDemo {public static void main(String[] args) {AtomicInteger atomicInteger = new AtomicInteger(5);System.out.println(atomicInteger.compareAndSet(5, 2022) + "\t" + atomicInteger.get());System.out.println(atomicInteger.compareAndSet(5, 2023) + "\t" + atomicInteger.get());atomicInteger.getAndIncrement();}
}

运行结果如下:

image-20230418232211927

CAS是JDK提供的非阻塞原子性操作,它通过硬件保证了比较-更新的原子性。

它是非阻塞的且自身原子性,也就是说这玩意效率更高且通过硬件保证,说明这玩意更可靠。

CAS是一条CPU的原子指令(cmpxchg指令),不会造成所谓的数据不一致问题,Unsafe提供的CAS方法(如compareAndSwapXXX)底层实现即为CPU指令cmpxchg。

执行cmpxchg指令的时候,会判断当前系统是否为多核系统,如果是就给总线加锁,只有一个线程会对总线加锁成功,加锁成功之后会执行cas操作,也就是说CAS的原子性实际上是CPU实现的, 其实在这一点上还是有排他锁的,只是比起用synchronized, 这里的排他时间要短的多, 所以在多线程情况下性能会比较好


compareAndSet()方法的源代码:

image-20230418235100617

参数说明:

  • var1:表示要操作的对象
  • var2:表示要操作对象中属性地址的偏移量
  • var4:表示需要修改的数据的期望值
  • var5/var6:表示需要修改为的新值

image-20230418235408903


2. Unsafe类

待续。。


http://www.ppmy.cn/news/48365.html

相关文章

单机部署MongoDB

文章目录 一、Windows 环境1.1 安装1.2 启动和连接1.3 Compass 图形化客户端 二、Linux 环境2.1 安装2.2 启动和连接 提示:以下是本篇文章正文内容,MongoDB 系列学习将会持续更新 一、Windows 环境 1.1 安装 ①下载安装包,官方下载地址&am…

【蓝桥杯省赛真题18】python阴影图形面积 青少年组蓝桥杯python编程省赛真题解析

目录 python阴影图形面积 一、题目要求 1、编程实现 2、输入输出

港科夜闻|国务院港澳办主任夏宝龙在香港科大考察期间,表示对学校开展创科工作的鼓励及希望...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、国务院港澳办主任夏宝龙在香港科大考察期间,表示对学校开展创科工作的鼓励及希望。考察期间,夏宝龙主任参观了香港科大的空气动力学和声学实验中心,以及香港科大先进显示与光电子技术国…

Postcat 如何生成接口文档,2 分钟学会

Postcat 是一个强大的开源、跨平台(Windows、Mac、Linux、Browsers...)的 API 开发测试工具,支持 REST、Websocket 等协议(即将支持 GraphQL、gRPC、TCP、UDP),帮助你加速完成 API 开发和测试工作。 作为代…

科普丨关于 A/B 测试的十问十答

你想知道的,都在这里!本文是神策数据「十问十答」科普系列文章的第二期,围绕 A/B 测试展开。 1 Q:什么是 A/B 测试? A:A/B 测试作为互联网企业的核心增长手段之一,其价值已在实际应用中被多次验…

“王炸”组合竞逐「行泊一体」

去年开始,在中国市场,「行泊一体」的热度,不亚于当年特斯拉推出FSD,甚至更加火热。从上游芯片、传感器,到域控制器、智能驾驶系统供应商以及车企,都在公开场合不断普及这个组合功能。 「行泊一体」市场的启…

半导体存储电路

半导体存储电路 SR锁存器和触发器寄存器存储器存储器分类RAMSRAMDRAM ROMMROMPROMEPROMEEPROMFLASH原理发现者应用工作原理存储单元 磁盘硬盘机械硬盘(HDD)固态硬盘(SSD) SR锁存器和触发器 SR锁存器用于记忆1位二进制信号&#x…

File类与IO流

1. java.io.File类的使用 1.1 概述 File类及本章下的各种流,都定义在java.io包下。一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录(俗称文件夹),与平台无关。(体会万事万物皆对象)File 能新…

4.7 贝塞尔曲线

学习目标: 学习贝塞尔曲线可以遵循以下步骤: 1.了解基本概念和定义:学习贝塞尔曲线前需要了解贝塞尔曲线的基本概念和定义,如何定义一条贝塞尔曲线、控制点的概念以及贝塞尔曲线的几何性质等。 2.学习贝塞尔曲线的构造方法&…

一文解决nltk安装问题ModuleNotFoundError: No module named ‘nltk‘,保姆级教程

目录 问题一:No module named ‘nltk‘ 问题二:Please use the NLTK Downloader to obtain the resource 下载科学上网工具 问题三:套娃报错 如果会科学上网,可以直接看问题三 问题一:No module named ‘nltk‘ Mo…

cdh Hue集成sentry的权限管理详细步骤

hue登录hue的第一个用户要用hue用户创建,默认hue为超级用户,hue用户页面的权限可以管理很多用户操作,比如查看hdfs目录,使用其他组件,授权功能等等 一.hive的配置 1.关闭模拟,开启sentry 2.添加配置(注意配置的位置) <property> <name>sentry.hive.tes…

Linux常用命令50个含示例

下面是50个常用的Linux命令&#xff0c;以及它们的使用示例和常用参数&#xff1a; ls&#xff1a;列出目录下的文件和子目录。 示例&#xff1a;ls /home/user/ 常用参数&#xff1a;-l 显示详细信息&#xff0c;-a 显示所有文件&#xff08;包括隐藏文件&#xff09;&#xf…

数据分析:麦当劳食品营养数据探索并可视化

系列文章目录 作者&#xff1a;i阿极 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4c1;评论&#x1f4d2;关注…

安全防御 --- 防火墙高可靠技术

防火墙高可靠技术&#xff08;双机热备&#xff09; VRRP&#xff1a;负责的单个接口的故障检测和流量引导。每个VRRP备份组拥有一个虚拟的IP地址&#xff0c;作为网络的网关地址&#xff1b;在VRRP主备倒换时通过发送免费的ARP来刷新对接设备的MAC地址转发表来引导流量。VGMP&…

阿里,字节,拼多多,B站挨个面试一遍,你们猜哪个待遇最高?

我面试的是软件测试岗位&#xff0c;去年中旬的时候从原来的公司离职了&#xff0c;不是工作不好&#xff0c;而是公司发展速度太慢&#xff0c;自己干了几年&#xff0c;也没有太大的成长。以我目前的工作经验和实力&#xff0c;我认为准备一两个月&#xff0c;进大厂不是什么…

手把手教你实现el-table实现跨表格禁用选项,以及禁用选择后,对应的全选按钮也要禁用任何操作

哈喽 大家好啊 今天我要实现不能跨表格选择&#xff0c;如果我选择了其中一个表格的选项后&#xff0c;那么其他的表格选项则被禁用 然后我选择了其中一个表格行&#xff0c;我其他的表格选项则应该被禁用 实现代码&#xff1a; 其中关键属性&#xff1a; selectable仅对 typ…

【越早知道越好】的道理——能够大大提升效率的【快捷键】

文章目录 1️⃣虚拟桌面⚜️第一步&#xff1a;打开任务视图⚜️第二步&#xff1a;创建桌面⚜️第三步&#xff1a;桌面切换⚜️第四步&#xff1a;桌面删除 2️⃣窗口切换3️⃣桌面分屏⚜️如何分屏 前言&#x1f9d1;‍&#x1f3a4;&#xff1a;作为程序员&#x1f468;‍&…

Linux基础内容(20)—— 共享内存

Linux基础内容&#xff08;19&#xff09;—— 进程间通信(介绍与管道内容)_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130034918?spm1001.2014.3001.5502 目录 1.共享内存的原理 2.共享内存的概念和特点 创建共享内存 共享内存的形式…

第七章节 spring AOP

《Spring》篇章整体栏目 ————————————————————————————— 【第一章】spring 概念与体系结构 【第二章】spring IoC 的工作原理 【第三章】spring IOC与Bean环境搭建与应用 【第四章】spring bean定义 【第五章】Spring 集合注入、作用域 【第六章】…

什么是计算量flops,什么是参数量params?

flops与params 计算量对应我们之前的时间复杂度&#xff0c;参数量对应于我们之前的空间复杂度&#xff0c;这么说就很明显了 也就是计算量要看网络执行时间的长短&#xff0c;参数量要看占用显存的量 其中最重要的衡量CNN 模型所需的计算力就是flops&#xff1a; FLOPS&…