当前位置: 首页 >  法制聚焦  >   >  正文

天天热点!Java的Atomic原子类

  • 2023-05-26 17:52:39 来源:博客园

Java SDK 并发包里提供了丰富的原子类,我们可以将其分为五个类别,这五个类别提供的方法基本上是相似的,并且每个类别都有若干原子类。

对基本数据类型的变量值进行原子更新;对对象变量的指向进行原子更新;对数组里面的的元素进行原子更新;原子化的对象属性更新器;原子化的累加器。基本数据类型

AtomicBoolean、AtomicLong、AtomicInteger 这三个类提供了一些对基本数据类型的变量值进行原子更新的方法。


(相关资料图)

这些类提供的方法是相似的,主要有(以 AtomicLong 为例):

// 原子化的 i++long getAndIncrement()// 原子化的 i--long getAndDecrement()// 原子化的 ++ilong incrementAndGet()// 原子化的 --ilong decrementAndGet()// 原子化的 i+=delta,返回值为+=前的i值long getAndAdd(long delta)// 原子化的 i+=delta,返回值为+=后的i值long addAndGet(delta)// CAS操作。如果写回成功返回true,否则返回falseboolean compareAndSet(long expect, long update)// 以下四个方法新值可以通过传入函数式接口(func函数)来计算long getAndUpdate(LongUnaryOperator updateFunction)long updateAndGet(LongUnaryOperator updateFunction)long getAndAccumulate(long x, LongBinaryOperator accumulatorFunction)long accumulateAndGet(long x, LongBinaryOperator accumulatorFunction)
// 演示 getAndUpdate() 方法的使用public static void main(String[] args) {    AtomicLong atomicLong = new AtomicLong(0);    long result = atomicLong.getAndUpdate(new LongUnaryOperator() {        @Override        public long applyAsLong(long operand) {            return operand + 1;        }    });}
对象引用类型

AtomicReference、AtomicStampedReference、AtomicMarkableReference 这三个类提供了一些对对象变量的指向进行原子更新的方法。如果需要对对象的属性进行原子更像,那么可以使用原子化的对象属性更新器。

public class ClassName {    AtomicReference employeeAR = new AtomicReference<>(new Employee("小明"));    public void methodName() {        Employee oldVal = employeeAR.get();        Employee newVal = new Employee(oldVal.getName());        employeeAR.compareAndSet(oldVal, newVal);    }}

对象引用的原子化更新需要重点关注 ABA 问题。当一个线程在进行 CAS 操作时,另一个线程可能会在此期间修改了同一个共享变量的值,然后又将其改回原来的值。这种情况下,CAS 操作就无法检测到共享变量值的变化,从而导致 ABA 问题。如果我们仅仅在写回数据前判断数值是 A,可能导致不合理的写回操作。AtomicStampedReference 和 AtomicMarkableReference 这两个原子类可以解决 ABA 问题。

AtomicStampedReference 通过为对象引用建立类似版本号(stamp)的方式,来解决 ABA 问题。AtomicStampedReference 实现的 CAS 方法增加了版本号参数AtomicMarkableReference 的实现机制则更简单,将版本号简化成了一个 Boolean 值
boolean compareAndSet(V expectedReference, V newReference,                           int expectedStamp, int newStamp)boolean compareAndSet(V expectedReference, V newReference,                          boolean expectedMark, boolean newMark)
数组

AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray 这三个类提供了一些对数组里面的的元素进行原子更新的方法。

public class ClassName {    AtomicLongArray atomicLongArray = new AtomicLongArray(new long[]{0, 1});    public void methodName() {        int index = 0;        long oldVal = atomicLongArray.get(index);        long newVal = oldVal + 1;        atomicLongArray.compareAndSet(index, oldVal, newVal);    }}
原子化的对象属性更新器

原子化的对象属性更新器有:AtomicIntegerFieldUpdater、AtomicLongFieldUpdater、AtomicReferenceFieldUpdater。

这三个类提供了一些对对象的属性进行原子更新的方法。这些方法是利用反射机制实现的。

public class ClassName {    AtomicIntegerFieldUpdater fieldUpdater =            AtomicIntegerFieldUpdater.newUpdater(Employee.class, "salary");    Employee employee = new Employee("小明", 1000);    public void methodName() {        int oldVal = employee.getSalary();        int newVal = oldVal + 1000;        fieldUpdater.compareAndSet(employee, oldVal, newVal);    }}

需要注意的是:

对象属性的类型必须是基本数据类型,不能是基本数据类型对应的包装类。如果对象属性的类型不是基本数据类型,newUpdater() 方法会抛出 IllegalArgumentException 运行时异常。对象的属性必须是 volatile 类型的,只有这样才能保证可见性。如果对象的属性不是 volatile 类型的,newUpdater() 方法会抛出 IllegalArgumentException 运行时异常。
// AtomicIntegerFieldUpdater 类中的代码if (field.getType() != int.class) {    throw new IllegalArgumentException("Must be integer type");}if (!Modifier.isVolatile(modifiers)) {    throw new IllegalArgumentException("Must be volatile type");}
原子化的累加器

原子化的累加器有:LongAdder、DoubleAdder、LongAccumulator、DoubleAccumulator。这四个类仅仅用来在多线程环境下,执行累加操作。

相比原子化的基本数据类型,原子化的累加器的速度更快,但是它(原子化的累加器)不支持 compareAndSet() 方法。如果仅仅需要累加操作,使用原子化的累加器性能会更好。

原子化的累加器的本质是空间换时间。

LongAdder 的使用示例如下所示:

public static void main(String[] args) {    LongAdder adder = new LongAdder();    // 初始化    adder.add(1);    // 累加    for (int i = 0; i < 100; i++) {        adder.increment();    }    long sum = adder.sum();}

LongAccumulator 与 LongAdder 类似,但 LongAccumulator 提供了更加灵活的累加操作,可以自定义累加函数。

使用示例如下所示。在使用示例中,我们创建了一个 LongAccumulator 对象,初始值为1,累加函数为 (x, y) -> x * y,即每次累加都将之前的结果与新的值相乘。然后,我们累加了三个数值,最后输出累加结果。由于累加函数是(x, y) -> x * y,所以最终的累加结果为1 * 5 * 10 * 20 = 1000。

public static void main(String[] args) {    LongAccumulator accumulator = new LongAccumulator(new LongBinaryOperator() {        @Override        public long applyAsLong(long left, long right) {            return left * right;        }    }, 1);    // 初始值为1,累加函数为(x, y) -> x * y    accumulator.accumulate(5);    accumulator.accumulate(10);    accumulator.accumulate(20);    // 累加结果为 1 * 5 * 10 * 20 = 1000    long result = accumulator.get();}
参考资料

21 | 原子类:无锁工具类的典范 (geekbang.org)

标签:

最新推荐

天天热点!Java的Atomic原子类

JavaSDK并发包里提供了丰富的原子类,我们可以将其分为五个类别,这五个类别提供的方法基本上是相似的,并

女儿墙高度一般为多少上人(女儿墙高度一般为多少)

相信大家对女儿墙高度一般为多少上人,女儿墙高度一般为多少的问题都很疑惑,这个问题很多人还不知道怎么解

“武汉一小学生校内被教师驾车撞伤致死”细节披露

“武汉一小学生校内被教师驾车撞伤致死”细节披露肇事教师称:曾挥手让学生离开车前5月25日,武汉市汉阳...

【新视野】全球首艘M350型浮式生产储卸油船今日交付

今天(5月26日),中国船舶大连造船自主设计的全球第一艘M350型浮式生产储卸油船正式交付。该船型是世界首个

土耳其新里拉兑换人民币最新汇率(2023年5月26日)

土耳其新里拉兑换人民币最新汇率(2023年5月26日)

实时焦点:中信证券:关注智慧轨交的基本面复苏与估值共振逻辑

中信证券指出,轨道交通系统作为国家交通运输网络的重要组成部分,近年来持续吸收人工智能、大数据等技术进

超24亿、24650元/㎡!刚刚,广州土拍叒现封顶摇号地块!

刚刚,广州再现摇号地块!白云嘉禾望岗东北侧AB2108014地块,经18轮竞价达最高限价,进入封顶摇号环节。地

AI浪潮下的智能家居市场新契机

序逛展今年的AWE,我们不难发现今年展品的科技感明显增强了,AI这个关键词在不同的家电品类间,不同的品牌

冯小刚一家三口罕露面,17 岁养女颜值逆袭似徐帆,曾被曝是私生女 全球热推荐

前不久举办的华表奖颁奖典礼堪称众星云集,不过除了盛装出席的明星们外,还有一位星二代也引发网友关注。5

宝骏悦也:树A00级越野独特标签 但网友呼吁电改油_环球视讯

悦也是一款充满矛盾的车型:论颜值没有对手,毕竟将硬派方盒子造型落地纯电动小型车的企业,有且仅有宝骏一

湖北多地发布暴雨红色预警-每日快播

24小时财经资讯平台,依托新锐财经日报《每日经济新闻》(NationalBusinessDaily),打造中国最具影响力的经

奥泰生物:5月25日融资买入475.78万元,融资融券余额1.05亿元

5月25日,奥泰生物(688606)融资买入475 78万元,融资偿还180 88万元,融资净买入294 9万元,融资余额1 04亿元。

头条焦点:张子枫22岁封后,23岁的易烊千玺为什么当不了影帝?原因有三点

近日,第18届、第19届中国电影华表奖已经落下了帷幕,张译、任素汐分别获得了第18届优秀男、女演员,刘烨和

瞄准算力基础设施风口 9只相关主题ETF产品扎堆申报

每经AI快讯,在A股市场结构性行情持续演绎、人工智能板块投资火热的背景下,人工智能细分领域的投资机会逐

焦点速递!艺术设计主要学什么_艺术设计主要学习的范围

欢迎观看本篇文章,小升来为大家解答以上问题。艺术设计主要学什么,艺术设计主要学习的范围很多人还不知道

美元指数创3月17日以来新高 当前短讯

周四(5月25日)纽约尾盘,ICE美元指数涨0 31%,报104 207点,日内交投区间为103 839-104 312点,逼近3月17日顶部104 445。

s31608是什么标准(s31608)

来为大家解答以下的问题,31608是什么标准,s31608这个很多人还不知道,现在让我们一起来看看吧!1、S31608不

如何调节照片大小到20kb_如何调整照片大小20kb以内

1、改格式。2、或者在PHOTOSHOP里面:图象--图象大小里面修改像素。本文到此分享完毕,希望对大家有所帮助。

相对运动和绝对运动_相对运动 新资讯

1、匀速直线运动。2、受力必然平衡!有斜向上的静摩擦力。

焦点速讯:漯河郾城区新店镇:以会为媒 招商助企

大河网讯日前,以“食全食美漯在其中”为主题的第二十届中国(漯河)食品博览会在漯河国际会展中心举行...

天天快播:日本长野发生持枪行凶事件致3死 两人是警察

25日下午4点25分左右,日本长野县中野市有人报警称“男子刀刺女性”,赶到现场的警察遭猎枪枪击。据该县...

新希望服务与成都市武侯区的6家单位签署八项战略合作 短讯

南方财经5月25日电,今日,新希望服务(3658 HK)与成都市武侯区人民政府、成都人居商业管理有限公司、首程

天天最新:乌克兰谷物协会(UGA):黑海粮食外运走廊协议谈判造成发货安排被推迟

乌克兰谷物协会(UGA):黑海粮食外运走廊协议谈判造成发货安排被推迟,这给乌克兰造成10亿美元(出口)损失

全球球精选!2023年绿皮书观后感字 绿皮书观后感英文(实用八篇)

当看完一部影视作品后,相信大家的视野一定开拓了不少吧,是时候静下心来好好写写观后感了。好的观后感对于

珍珠脚链戴哪只脚_把珍珠戴在脚上好吗

想必现在有很多小伙伴对于把珍珠戴在脚上好吗方面的知识都比较想要了解,那么今天小好小编就为大家收集了一

天热可开空调戴口罩吗 天热可开空调戴口罩吗女生 环球热议

1、18日晚,张文宏医生在一场直播中表示,中国疫情防控做得很好,人们都戴口罩的情况下传染新冠病毒的概率

全球最资讯丨ETF观察丨英伟达盘后一度涨近30%,标普500ETF(513500)溢价明显

距离6月1日大限,已正式迈入了倒计时一周的时间,6月初到期的多笔超短期美债收益率一举升破了7%关口,周三

世界热议:丰立智能涨20% 三个交易日机构净卖出6266万元

丰立智能涨20%三个交易日机构净卖出6266万元---中国经济网北京5月25日讯丰立智能今日涨停,股价收报66 97元

七月火把节歌曲歌词_七月火把节歌曲歌词是什么

七月火把节歌曲歌词,七月火把节歌曲歌词是什么很多人还不知道,现在让我们一起来看看吧!1、《七月火把节

比亚迪、长城汽车股价双双走低

证券时报·e公司5月25日消息,比亚迪、长城汽车股价双双走低,比亚迪跌超1%,长城汽车跌超4%。

泾河集团发布2023年度境外债券承销服务项目成交结果公告 世界看点

陕西省西咸新区泾河新城开发建设(集团)有限公司(简称“泾河集团”)发布2023年度境外债券承销服务项目成...

天天最新:中国电信副总经理夏冰:深化数智融合 赋能转型发展

5月25日,以“数字化转型赋能高质量发展”为主题的第十七届中国信息港论坛暨首届数字化转型高峰论坛在青...

AME女友晒巴厘岛旅游照片,“不要再竹竹鸭了啊,那个是楠楠!”_环球观察

原LGD成员AME、Xinq、Faithbian近日在马尔代夫旅行,在照片上看到了三位选手和他们的女朋友。从马代回来后

消息!吉祥航空:目前公司整体机队日利用率已恢复至10.4小时左右

吉祥航空(603885)在业绩说明会上表示,目前从公司整体机队的日利用率来看,已经恢复到10 4小时左右;分区域

聚焦金融向实,打造健康生态 太保健康产业基金助航大健康战略行动

日前,中国太保召开大健康战略行动发布会,正式对外发布“352”大健康服务蓝图,擘画“健康生活太保行动...

“创新成果超市”激发一线职工创新活力 微速讯

原标题:“创新成果超市”激发一线职工创新活力日前,康为世纪的职工邵振中通过“职工创新成果超市”微...

有本事的人,都有这3个“靠山”

人生就是不断与其博弈的过程,同生活博弈,我们靠什么赢?知识与见识 01愚昧无知会让自己看不清真相,迷失

全球热资讯!叮 ~ 这里有一份来自2023中关村论坛展览(科博会)的邀请函

创新引领,开放共赢。2023中关村论坛展览(科博会)将于5月25日至30日在中关村国家自主创新示范区展示中心

渔船“鲁蓬远渔028”沉没

5月24日2时12分,渔船“鲁蓬远渔028”沉没,位置位于南纬5度47 939分,东经77度46 315分,水深约5000米。截

讯息:上海电力(600021)5月24日主力资金净卖出2237.63万元

截至2023年5月24日收盘,上海电力(600021)报收于10 7元,下跌2 19%,换手率2 36%,成交量61 88万手,成交额6 7

威腾电气:5月24日融资净买入818.56万元,连续3日累计净买入2096.83万元

5月24日,威腾电气(688226)融资买入1137 84万元,融资偿还319 28万元,融资净买入818 56万元,融资余额45

美国佛罗里达州长参加竞选下届总统,曾和特朗普是政治盟友

据新华社华盛顿5月24日电美国佛罗里达州长德桑蒂斯24日向联邦选举委员会递交文书,参加竞选下一届美国总统

4个省级区域医疗中心部分专科投运 信息

昆明信息港讯(昆明日报记者廖兴阳)5月24日,来自云南省发展和改革委员会的消息,滇东北、曲靖、滇南、滇

西安创新推出户口迁移“跨省通办”便民举措 环球快资讯

本报西安5月24日电(记者龚仕建)“太方便了,省时省力,再也不用两头跑了,省了上千公里路程,真是高效...

【全球快播报】石头的外衣那部电视剧 石头的外衣

导读来为大家解答以上的问题。石头的外衣那部电视剧,石头的外衣这个很多人还不知道,现在让我们一起来看看

今日最新更新内容 张翰新剧东八区的先生们遭质疑 手放在王晓晨的胸部|视焦点讯

目前张翰新剧东八区的先生们遭质疑手放在王晓晨的胸部的关注度特别高,热度非常高,这也证明大家现在都在关

寻找生命的逻辑:生物学观念的发展(关于寻找生命的逻辑:生物学观念的发展介绍)

大家好,小万来为大家解答以上的问题。寻找生命的逻辑:生物学观念的发展,关于寻找生命的逻辑:生物学观念

厦门警方通报男子因网络口角砍伤两人:伤者无生命危险,嫌疑人被抓获

大象新闻记者刘园园视频报道5月24日,厦门市公安局发布警情通报称:5月23日20时46分,厦门市公安局新店派出

动态焦点:思南县国开发展基金资金使用管理办法

1、《思南县国开发展基金资金使用管理办法》是思南县施行的办法。本文到此分享完毕,希望对大家有所帮助。

今热点:打五折怎么算价格(打五折怎么算)

1、商品打折怎么计算解析:商品打折问题是小学六年级百分数的应用中的一个类型,这种题型中有三个数量:原

X 广告
X 广告

精彩放送

焦点短讯!我武生物:黄花蒿花粉变应原舌下滴剂扩展儿童适应症人群的药品补充申请获得批准

今日聚焦!道达投资手记:走势打破常规 多头会背水一战

什么是慢性疾病医保_什么是慢性病|全球观天下

云南省财政厅企业会计信息网络报送系统管理员 云南省财政厅企业会计信息网络报送系统|每日速讯

光伏龙头组件花式创新 N型技术大放异彩

桂发祥:针对糖尿病人和控糖人群,公司开发了糖醇类麻花和糖醇类糕点,以及抑制蔗糖吸收的益糖麻花

四川青川一站式帮扶让就业创业更精准

2023年全市结核病防治工作培训会暨肺结核患者关怀项目启动会在商州召开

外国的csgo开箱平台有哪些 csgo外国职业选手开箱平台推荐-热资讯

《侠魂》6月1日开启删档测试

今头条!ABAQUS软件有哪些功能

荣耀赵明:走长期主义路线,用产品定义自己|全球简讯

年轻人加入老年旅游团被调侃体力不行 老年人比年轻人的精力还要旺盛 每日热闻

翔华教育助力成人学历提升,为你打开人生大门!|天天通讯

中企建设尼日利亚铁路货车组装厂正式运营|环球播报

佳都科技:公司自主研发的掌静脉识别终端产品已投入使用

美国驻华大使:期待在新任中国驻美大使谢锋履新后继续和他一起工作

矩阵股份:5月23日融资买入179.22万元,融资融券余额3004.95万元|全球热头条

世界微头条丨2023上海市高中学业水平合格考试息技术科目模拟练习系统上线

“太空种苗”落户劳动试验田

民法系统论研究_关于民法系统论研究简述-热门

天天快看:为什么说人民币汇率不会大起大落

新股公告|易点云(02416)最终发售价为每股10.19港元 预计5月25日上市 天天信息

每日热讯!2023年一级建造师《法规知识》建设工程发承包法律制度思维导图_天天实时

天天看点:两座靠美食出圈的工业老城相互取经

今日精选:头孢地尼胶囊说明书用法用量_头孢地尼胶囊说明书

要闻速递:保靖县举办“送解优”惠企政策宣讲座谈会

4月快递行业数据点评:淡季价格小幅回落 看好件量增长与竞争格局改善

【环球播资讯】注意!富通信息将于6月8日召开股东大会

世界热议:平坝区举办“中国旅游日”宣传活动

公司问答丨悦康药业:公司重点品种悦康通进入湖北中成药省际带量采购方案目录

无为法_关于无为法介绍

多名乘客讲述乘坐国泰航空经历:空乘对白人殷勤,今天态度仍然很冷漠|微动态

蟑螂为什会飞_蟑螂会飞飞吗简介介绍 世界时讯

安徽艺术学院2023年招生章程

社保认证“零距离” 上门服务暖人心|天天速看料

礼赞劳动精神|曹炳强:年轻人的偶像-天天最资讯

精彩看点:唐山这里要建全民健身中心

《四川省食品安全条例》即将出台,有这些亮点

全球观热点:备案均价约11.2万元/平米 深圳南山招商四海臻邸获批预售

全球视点!爱施德5月23日盘中涨幅达5%

讯息:就是这么自信!《最终幻想16》没做首日补丁

每日速读!杭州玉渚园艺有限公司_关于杭州玉渚园艺有限公司概略

苏式建筑和徽派建筑的区别

天天热消息:新冠药概念走势活跃,众生药业涨停,翰宇药业等大涨

世界热点评!瓷器上的姹紫嫣红,你能认出几种?

酒柜格子尺寸一般是多少的(酒柜格子尺寸一般是多少)

省民政厅发布2023年巩固拓展民政领域脱贫攻坚成果同乡村振兴有效衔接重点工作|每日热文

看热讯:济南城建50亿元小公募项目状态更新为“已反馈”

6年级上册数学教学计划_六年级上册数学教学计划新人教版

Copyright ©  2015-2022 南非律师网版权所有  备案号:沪ICP备2022005074号-13   联系邮箱:58 55 97 3@qq.com