公司法
当前位置: 首页 法律大全

atomic 指令(AtomicInteger底层实现原理是什么)

时间:2023-05-31 作者: 小编 阅读量: 2 栏目名: 法律大全

AtomicInteger提供一种线程安全的加减操作接口。而volatile这个值的作用就是告诉VM:对于这个成员变量不能保存它的副本,要直接与共享成员变量交互。如果当前数值未变,表示没有其他线程进行并发修改,则成功更新。CAS有3个操作数:V:内存中的值。CAS是Java并发中所谓lock-free机制的基础。CAS也并不是没有副作用,试想,其常用的失败重试机制,隐含着一个假设,即竞争情况是短暂的。

AtomicInteger

AtomicInteger 是对 int 类型的一个封装,提供了原子性的访问和更新操作,其原子性操作的实现是基于CAS(compare-and-swap)技术。

AtomicInteger 提供一种线程安全的加减操作接口。

  • public final int get() //获取当前的值
  • public final int getAndSet(int newValue)//获取当前的值,并设置新的值
  • public final int getAndIncrement() //获取当前的值,并自增
  • public final int getAndDecrement() //获取当前的值,并自减
  • public final int getAndAdd(int delta) //获取当前的值,并加上预期的值

看看 AtomicInteger 源代码:

private volatile int value;

volatile 关键字是保证AtomicInteger 线程安全的根源。

volatile 修饰的成员变量,在每次被线程访问时,都强迫从共享内存重新读取该成员的值,而且,当成员变量值发生变化时,强迫将变化的值重新写入共享内存,这样两个不同的线程在访问同一个共享变量的值时,始终看到的是同一个值。

Java语言规范指出:为了获取最佳的运行速度,允许线程保留共享变量的副本,当这个线程进入或者离开同步代码块时,才与共享成员变量进行比对,如果有变化再更新共享成员变量。这样当多个线程同时访问一个共享变量时,可能会存在值不同步的现象。

而volatile这个值的作用就是告诉VM:对于这个成员变量不能保存它的副本,要直接与共享成员变量交互。

建议:当多个线程同时访问一个共享变量时,可以使用volatile,而当访问的变量已在synchronized代码块中时,不必使用。

缺点:使用volatile将使得VM优化失去作用,导致效率较低,所以要在必要的时候使用。

CAS(compare-and-swap)

所谓CAS,表示的是一系列操作的集合,获取当前值,进行运算,利用CAS 指令试图进行更新。

如果当前数值未变,表示没有其他线程进行并发修改,则成功更新。

否则,可能出现不同的选择,要么进行重试,要么就返回一个成功或者失败的结果。

CAS就是Compare and Swap的意思,比较并操作。

CAS有3个操作数:

  • V:内存中的值。
  • B:要修改为的新值。
  • A:若V==A则V=B。

其实CAS的过程也是挺简单的,来一发流程图吧。

CAS简而言之就是:CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。

CAS 是Java并发中所谓 lock-free 机制的基础。

CAS 也并不是没有副作用,试想,其常用的失败重试机制,隐含着一个假设,即竞争情况是短暂的。大多数应用场景下,确实大部分重试只会发生一次就获得了成功,但是总是有意外情况,所以在有需要的时候,还是要考虑限制自旋的次数,以免过度消耗CPU。

AbstractQueuedSynchronizer(AQS)

是Java 并发包中,实现各种同步结构的基础。

AQS 内部数据和方法,可以简单拆分为:

  • 一个volatile 的整数成员状态,同时提供了setState() 和 getState() 方法;
  • private volatile int state;
  • 一个先进先出(FIFO)的等待线程队列(waiter),实现多线程间竞争和等待,是AQS 机制的核心之一;
  • 各种基于 CAS 的基础操作方法,以及各种期望具体同步结构去实现的 acquire/release 方法;

利用AQS 实现一个同步结构,至少需要实现2个基本类型的方法,分别是 acquire 操作,获取资源的独占权;还有就是 release 操作,释放对某个资源的独占。

    推荐阅读
  • 武汉大学是一本还是二本(武汉大学是一本)

    下面希望有你要的答案,我们一起来看看吧!武汉大学是一本还是二本武汉大学位于湖北省,是一所一本大学。

  • 电视剧靠什么赚钱(电视剧怎么赚钱)

    比如包括在投资中的场地费、住宿费因为有了场地出租方和宾馆的赞助而节省下来就算是电视剧本身带来的销售收入。出品方按集销售给各电视台所获得的广告收入。出品方将电视剧的音像出版权卖给各音像出版公司所得的版权销售收入。当然还有除了这三种主要途径之外的其它隐性或公开的收入,比如剧本改编为小说出版的版税收入、在其他媒体上播出获得的广告和部分销售收入等。

  • 2022年成都国色天乡水上乐园高考生优惠

    2022年成都国色天乡水上乐园中高考生优惠,门票价格120元/人!1个手机号/身份证仅限购买3张!至少提前2小时购买!店铺详细地址:四川省成都市温江区万春镇88号国色天乡水上乐园预约咨询电话:028-61708788此产品一经预定有效期内未消费可退款,逾期不可退此产品一经预定不可改期,敬请谅解

  • 蜂蜜水减肥法(蜂蜜水减肥法简单介绍)

    蜂蜜水减肥法蜂蜜水减肥法,是一种流行的减肥方法。蜂蜜蕴含的脂肪酸能促进肠道的蠕动,而其丰富的维他命和矿物质则具调整肠胃的功能,能排走体内毒素,改善便秘情况。蜂蜜水减肥法是指一日三餐均以蜂蜜水或以蜂蜜茶代替,从而起到减重、滋养皮肤的效果。吃蜂蜜之所以能减重,因为它含的热量很低,只有同等份量白砂糖的75%。此外蜂蜜能补充维他命B族、维他命C、钾、钙等,不会破坏身体营养均衡,是减重的佳品。

  • 蚧壳虫用什么农药可以杀死它,专杀果树蚧壳虫用什么农药

    在蚧壳虫若虫发生盛期,选用40%氧化乐果1000倍液、50%马拉硫磷1500倍液、25%亚胺硫磷1000倍液、2.5%溴氰菊酯3000倍液喷雾防治。且易诱发煤烟病。喷药后48小时内若遇雨,须及时补喷。使用后可以迅速被叶片吸收,传导到植株各个部位,对刺吸式害虫有明显效果,与杀扑磷搭配使用,对杀灭蚧壳虫有很好防治效果。

  • 移动迷宫到底讲的什么(移动迷宫简单介绍)

    移动迷宫到底讲的什么《移动迷宫》讲述的是一个叫托马斯的男孩在电梯中醒来,他发现自己失忆了,除了名字什么都记不得。墙内住着50位男孩,他们都被困在了绵延不绝的迷宫森林当中。一天,电梯为他们送来了一个女孩特雷莎,她是来到“林间空地”的第一个女孩。此后,迷宫逐渐开始发生变化,一切都陷入了混乱中,托马斯和特雷莎决定一起走上破解迷宫之路,找出迷宫背后令人不寒而栗的秘密。

  • 记者证怎么考(怎么考核的呢)

    记者证怎么考申领记者证必须具备以下条件,新闻媒体采编一线工作满一年以上,由新闻单位向省级新闻出版申报。进行封闭培训,考试合格获得“广播电视编辑记者资格考试合格证”。在新闻单位从事新闻工作一年以上,由供职的新闻单位向新闻出版主管单位提交领取新闻记者证的相关材料,经核准后颁发“记者证”。新闻记者证实行年度核验制度,每五年统一换一次。

  • 避重就轻的意思是什么意思(避重就轻的含义)

    下面更多详细答案一起来看看吧!避重就轻的意思是什么意思避重就轻的意思是:指回避重的责任,只拣轻的来承担。也指回避要点,只谈无关紧要的事情。清·曹雪芹《红楼梦》第一百二回:恐将来弄出大祸,所以借了一件失察的事情参的,倒是避重就轻的意思,也未可知。批评与自我批评,要抓住主要问题,不能躲躲闪闪,避重就轻。连动式;作谓语、定语、状语;指避开重大问题与责任。避实就虚、避难就易、拈轻怕重、避重逐轻。

  • 海南专升本可以去哪些学校(这7所院校的真实评价)

    海南专升本可以去哪些学校2022年海南专升本招生院校共有7所,分别是海南师范大学、海南医学院、琼台师范学院、海南热带海洋学院、海口经济学院、海南科技职业大学、三亚学院。海南师范大学的招生专业全是与其他专科院校联合培养所以没有进行收集。距离学校最近的桂林洋海滩差不多有六七公里。校内出行也蛮方便,有校车,要是会骑小电驴最好买个小电驴,更加方便。条件允许,可以约三两好友骑小电驴去三亚湾看日落也是很不错的经历。