问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

为什么会有 AtomicReference ?

发布网友 发布时间:12小时前

我来回答

1个回答

热心网友 时间:2024-10-22 08:05

原子性工具类AtomicReference是Java.util.concurrent.atomic包下的一个类,它能够确保在修改对象引用时的线程安全性。例如在处理账户问题时,多个线程可能同时向同一个账户存入款项,使用AtomicReference可以避免这种情况导致的数据不一致问题。

在使用AtomicReference时,我们需要了解它的基本使用方法。首先声明一个全局变量BankCard,并使用volatile关键字对其进行修饰,以确保在对其引用进行变化后对其他线程可见。然后,我们可以通过AtomicReference来封装BankCard的引用,使用get()方法获得原子性的引用,接着使用CAS(Compare and Swap)乐观锁进行非阻塞更新。这样可以确保在修改引用时的线程安全性。

AtomicReference源码解析中,我们发现它主要依赖于sun.misc.Unsafe类的native方法来保证操作的原子性。Unsafe的objectFieldOffset方法可以获取成员属性在内存中的地址相对于对象内存地址的偏移量,这个偏移量就是valueOffset,方便后续通过内存地址直接进行操作。value是AtomicReference的实际值,由于使用了volatile,这个值实际上就是内存值。

AtomicReference与AtomicInteger非常相似,它们内部都使用了Unsafe、value、valueOffset等属性。get()和set()方法分别可以原子性地读取和设置AtomicReference中的数据。lazySet方法则在没有内存屏障的情况下读写变量,以减少开销。getAndSet方法则调用unsafe中的getAndSetObject方法,涉及getObjectVolatile和compareAndSwapObject方法,它们在do...while循环中,每次获取最新对象引用的值,如果使用CAS成功交换两个对象,则直接返回更新前的内存值,即旧值。

AtomicReference的关键方法CAS(Compare and Swap)在compareAndSet方法中实现,与AtomicInteger不同的是,AtomicReference调用compareAndSwapObject方法。这段代码底层使用了Atomic:cmpxchg方法进行CAS交换,并将旧值进行decode返回。

weakCompareAndSet方法在JDK1.8中与compareAndSet方法完全相同,但实际上这是JDK源码设计的巧妙之处,用于处理特定场景下的线程安全问题。

在使用AtomicReference时,我们需要充分了解它的特性和源码实现,以确保在多线程环境下正确地管理和更新对象引用。本文主要介绍了AtomicReference的出现背景、使用场景以及源码分析,涵盖了网络上关于AtomicReference的大部分内容。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...DE分别在BC AC上,且AE=CD,连接AD,BE交于点p 过B作BQ⊥AD Q为垂足... ...AC上的点,且AE=CD 连接AD BE 交于点P 作BQ垂 ...ac上的点,且ae=cd,连接ad、be交于点p作BQ⊥AD,垂足为Q,求证BP=2... ...AC上的点,且AE=CD,链接AD、BE交于点P,作BQ⊥AD ...AC上的点,且AE=CD,连结AD、BE交于点P,作BQ⊥AD,垂足为Q. ...刚刚大学毕业。由于生病,导致目前没有工作,大学四年的女友也因为我... 形容“荷花的特点”有什么词语 梦见比人还高大的石头蛤蟆,杀人拆房子。我和其他人一起翘辫子了._百度... 梦见别人送我一条蛇,我却把他不小心放了.可是我用石头打了它一下... 作文 我生活在鼓励中 一篇搞定CAS,深度讲解,面试实践必备 假面骑士空我特技 假面骑士善意是反派吗 请教电脑高人,买了二手电脑,用别人用过的电脑危险吗?要怎么做才能保护自... 假面骑士善意是好的还是坏的 我现在兰州,单位让我找个比较好的旅行社出去旅游,麻烦各位介绍一... 想从兰州出发到上海旅游,请问哪家旅行社有这方面的团? 兰州龙行国际天下旅行社公司介绍 兰州的龙行天下国际旅行社 怎么样? 后汉书·广陵思王荆传课外阅读 1963年属兔缺金的女人带什么水晶 怎么样解决中考带来的压力 做事前后不知道怎么决定这是什么四字词语 七神器千年积木 什么断什么决的词语有哪些 我向别人转了76元红包但是对方没收到我发给他的红包红包是否会退回来了... 西北庭院适合栽什么树? 不要白费功夫好不好 你的努力将得到的是徒劳无功 、当女孩说这话我还 ... 本人09年大专毕业,从事建筑行业,想问问目前我可以考什么证书?谢谢 关于建筑方面的一些证书 CAS锁机制 如何用绳子编吊床图解 带木棍的益智玩具叫什么?有六个方块,方块上有大孔和小孔,有木棍有粗的... 如何自制倒杯架 吊床绳如何编织 有线话筒本来是不带开关的,现在必须要外置加个开关,怎么加? 父子在一个单位工作的利与弊 演员苗圃拿到飞机驾照了吗 武装叛乱罪既遂量刑标准 下载了一个linux5.4的iso镜像但是在装的时候要输入 serial,name和compan... 申请晨星成长计划之后怎样还款?方便吗? 申请大学生贷款晨星成长计划后会影响信贷吗? linux下C程序 ,请问有什么问题啊? 为什么写不进c.c这个文件里呢 一打... 晨星成长计划只需要牛逼的大学生吗? linux,PHP5.4下安装opcache.DZ会有加速效果吗 读专科还是上高五?我现在很纠结,无助,还有就是离家的伤感。。 “摧残苏武节”的出处是哪里 “独背朝阳信马行”的出处是哪里 南昌大学二类通识课一学期最多可以选几门?急求答案。 γ-谷氨酰转移酶偏高原因