Java学习之原子性操作(Atomic)

CAS(compare and swap):

public static void main(String[] args) throws InterruptedException {// AtomicInteger是一个提供原子操作的Integer类,通过CAS思想实现AtomicInteger a = new AtomicInteger(0);System.out.println(a.compareAndSet(0,5));System.out.println(a);
}

执行结果:

原子性操作采用是CAS思想,CAS思想是比较交换,即CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。 如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值 。否则,处理器不做任何操作。compareAndSet源码如下:

/**
上述代码传入的值expectedValue 期望值(0),newValue新值(5)
VALUE:用于AtomicInteger类中value字段的内存偏移量,并将这个偏移量存储在VALUE变量中。
private static final long VALUE = U.objectFieldOffset(AtomicInteger.class, "value");
*/
public final boolean compareAndSet(int expectedValue, int newValue) {return U.compareAndSetInt(this, VALUE, expectedValue, newValue);
}
​
// unsafe类中的方法,通过native修饰,访问特定内存数据
// compareAndSetInt(this,VALUE,0,5),通过当前对象的值与期望值进行比较,如果一样则将新值赋给当前对象
@HotSpotIntrinsicCandidate
public final native boolean compareAndSetInt(Object o, long offset,int expected,int x);

AtomicInteger提供的原子性自加操作方法incrementAndGet()及源码解释如下:

AtomicInteger a = new AtomicInteger(0);
// 先自加后赋值 执行结果为1
a.incrementAndGet();
​
// 源码如下:
public final int incrementAndGet() {// 调用unsafe类的getAndAddInt方法return U.getAndAddInt(this, VALUE, 1) + 1;}
// getAndAddInt方法源码如下
@HotSpotIntrinsicCandidatepublic final int getAndAddInt(Object o, long offset, int delta) {// 定义一个返回值int v;// 调用do-while循环do {// 通过调用底层方法获取内存中的值 o是当前对象 offset是偏移量v = getIntVolatile(o, offset);// 通过CAS思想调用方法赋值} while (!weakCompareAndSetInt(o, offset, v, v + delta));return v;}
// weakCompareAndSetInt源码如下
// weakCompareAndSetInt(this,VALUE,v,v+1)
@HotSpotIntrinsicCandidatepublic final boolean weakCompareAndSetInt(Object o, long offset,int expected,int x) {// 该方法底层调用的依然是compareAndSetInt,见上述源码解释return compareAndSetInt(o, offset, expected, x);}
java.util.concurrent.atomic提供的其他类,可查阅Java 8 中文版 - 在线API手册 - 码工具文档

以上类的使用后续陆续补充......

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/301162.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KnowLog:基于知识增强的日志预训练语言模型|顶会ICSE 2024论文

徐波 东华大学副教授 东华大学计算机学院信息技术系副系主任,复旦大学知识工场实验室副主任,智能运维方向负责人。入选“上海市青年科技英才扬帆计划”。研究成果发表在IJCAI、ICDE、ICSE、ISSRE、ICWS、CIKM、COLING等国际会议上,曾获中国数…

MySQL的基本查询

📟作者主页:慢热的陕西人 🌴专栏链接:MySQL 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客主要内容介绍了mysql的基本查询部分的知识,包括Crea…

记录一次官网访问很慢的情况

客户查看云监控,带宽未超限,客户取的是1分钟的原生值,也就是1分钟也是个平均值。 但是客户的原始值,其实就是1分钟内的平均值。所以客户的瞬时超限,其实是看不出来的。但是后端同事从实时监控里面可以看到超限的情况。 客户升带宽后, 发现还…

【InternLM 实战营第二期笔记】使用茴香豆搭建你的RAG智能助理

RAG RAG是什么 RAG(Retrieval Augmented Generation)技术,通过检索与用户输入相关的信息片段,并结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇到的挑战, 如幻觉、知识过时和缺乏透明、可追…

全面的Docker快速入门教程(详细)

前言: 都2024年了,你还在为了安装一个开发或者部署环境、软件而花费半天的时间吗?你还在解决开发环境能够正常访问,而发布测试环境无法正常访问的问题吗?你还在为持续集成和持续交付(CI / CD)工…

1.8.3 卷积神经网络近年来在结构设计上的主要发展和变迁——GoogleNet/inception-v1

1.8.3 卷积神经网络近年来在结构设计上的主要发展和变迁——GoogleNet/ inception-v1 前情回顾: 1.8.1 卷积神经网络近年来在结构设计上的主要发展和变迁——AlexNet 1.8.2 卷积神经网络近年来在结构设计上的主要发展和变迁——VGGNet GoogleNet问题 在VGGNet简单堆…

【超简单】基于PaddleSpeech搭建个人语音听写服务

一、【超简单】之基于PaddleSpeech搭建个人语音听写服务 1.需求分析 亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?当您面对成吨的会议录音,着急写会议纪要而不得不愚公移山、人海战术?听的头晕眼花,听的漏洞百出,听的怀疑人生,那么你…

软件测试_黑盒测试_等价类划分法

黑盒测试 等价类划分法 等价类划分法 一个程序可以有多个输入,等价类划分就是将这些输入数据按照输入需求进行分类,将它们划分为若干个子集,这些子集即为等价类,在每个等价类中选择有代表性的数据设计测试用例。 有效等价类&a…

安全威胁情报的漏洞挖掘

前段时间edu上出现了两个网安总队收取安全情报,不收漏洞,下面简单分析一下如何挖掘安全情报。 在发现在edu中新增了两个网安总队收安全情报等漏洞,那威胁情报又会包含哪些内容呢?以前或许会看到各种ss网站、bc网站、yx网站满天飞&…

网络原理(6)——IP协议

目录 一、网段划分 现在的网络划分: 1、一般情况下的家庭网络环境 2、IP地址 3、子网掩码 4、网关 以前的网络划分: 二、特殊IP 1、环回 IP 2、主机号为全 0 的IP 3、广播地址IP 三、路由选择(路线规划) 一、网段划分…

JavaScript(二)-Web APIS

文章目录 Web API 基本认知作用和分类什么是DOMDOM树DOM对象获取DOM对象操作元素内容操作元素属性操作元素常用属性操作元素样式属性自定义属性 定时器-间歇函数定时器函数的理解定时器函数使用间歇函数 事件监听与绑定事件监听事件监听版本事件类型事件对象什么是事件对象获取…

国债逆回购如何收费,现在最低的佣金可以做到多少?

国债逆回购是投资者在持有国债的情况下将其出售给金融机构,同时与该机构约定在未来的一定期限内回购国债。对于投资者来说,国债逆回购是一种获取流动资金的方式,同时也可以获得一定的收益。然而,国债逆回购费用对于投资者而言可能…

《Market Insight:中国流程挖掘市场发展洞察(2023)》报告将于4月11日发布

流程挖掘市场虽然项目数量有所增加,但目前的中国市场依旧处于早期阶段。而伴随着生成式AI技术的发展,流程挖掘市场又将迎来的新的变革和机遇,RPA中国在调研中发现,诸多技术供应商在努力地拥抱生成式AI,以便于提升自身产…

微信开发工具——进行网页授权

微信开发工具——进行网页授权 微信公众平台设置 1.在首页创建好自己的订阅号 网站:https://mp.weixin.qq.com/ 点击立即注册,在选择订阅号(个人创建使用) 之后按流程填写后,点击设置与开发-------->基本配置,这…

基于DCT和扩频的音频水印嵌入提取算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ......................................................................... N 10; %嵌入一…

探索 Java 网络爬虫:Jsoup、HtmlUnit 与 WebMagic 的比较分析

1、引言 在当今信息爆炸的时代,网络数据的获取和处理变得至关重要。对于 Java 开发者而言,掌握高效的网页抓取技术是提升数据处理能力的关键。本文将深入探讨三款广受欢迎的 Java 网页抓取工具:Jsoup、HtmlUnit 和 WebMagic,分析…

TMGM外汇平台FX110测评:是一家可靠的外汇经纪商吗?

关于TMGM TMGM集团2013年成立于澳大利亚悉尼,是英超豪门切尔西足球俱乐部官方合作伙伴。作为一家为全球客户提供金融产品交易的经纪商,通过FX110查询可知,TMGM同时受ASIC(澳大利亚证券委员会)、VFSC(瓦努阿…

数据库如何预防勒索病毒

1.过去一年全球勒索病毒概览 援引cyberint发布的Ransomware Recap 2023,全球勒索软件攻击次数较去年大幅增长,达到4832起,相较于2022年的2640起,增长幅度惊人。这一增长不仅体现在数量上,更体现在攻击的全球性和蔓延趋…

Vue - 你知道Vue中computed和watch的区别吗

难度级别:中高级及以上 提问概率:70% 二者都是用来监听数据变化的,而且在日常工作中大部分时候都只是局限于简单实用,所以到了面试中很难全面说出二者的区别。接下来我们看一下,二者究竟有哪些区别呢? 先说computed,它的主要用途是监听…

Longan Pi 3H 开发板体验

Longan Pi 3H 开发板体验 开箱内容 打开包装,你可以看到以下物品 一个Longan Pi 3H盒子Longan Pi 3H开发板 产品基本介绍 Longan Pi 3H 是基于 Longan Module 3H 核心板的 ARM Linux 开发板,以 H618 (Quad core ARM Cortex-A531.5Ghz , 64-bit) 为主控…