您的位置 首页 > 德语词汇

atomic是什么意思?用法、例句,Atomic原子类介绍

今天给各位分享atomic是什么意思?用法、例句的知识,其中也会对Atomic原子类介绍进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

Atomic翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的。在我们这里Atomic是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。

atomic是什么意思?用法、例句,Atomic原子类介绍

所以,所谓原子类说简单点就是具有原子/原子操作特征的类。

并发包java.util.concurrent的原子类都存放在java.util.concurrent.atomic下,如下图所示。

根据操作的数据类型,可以将JUC包中的原子类分为4类

使用原子的方式更新数组里的某个元素

AtomicMarkableReference是将一个boolean值作是否有更改的标记,本质就是它的版本号只有两个,true和false,

修改的时候在这两个版本号之间来回切换,这样做并不能解决ABA的问题,只是会降低ABA问题发生的几率而已

publicclassSolveABAByAtomicMarkableReference{\n\nprivatestaticAtomicMarkableReferenceatomicMarkableReference=newAtomicMarkableReference(100,false);\n\npublicstaticvoidmain(String[]args){\n\nThreadrefT1=newThread(()->{\ntry{\nTimeUnit.SECONDS.sleep(1);\n}catch(InterruptedExceptione){\ne.printStackTrace();\n}\natomicMarkableReference.compareAndSet(100,101,atomicMarkableReference.isMarked(),!atomicMarkableReference.isMarked());\natomicMarkableReference.compareAndSet(101,100,atomicMarkableReference.isMarked(),!atomicMarkableReference.isMarked());\n});\n\nThreadrefT2=newThread(()->{\nbooleanmarked=atomicMarkableReference.isMarked();\ntry{\nTimeUnit.SECONDS.sleep(2);\n}catch(InterruptedExceptione){\ne.printStackTrace();\n}\nbooleanc3=atomicMarkableReference.compareAndSet(100,101,marked,!marked);\nSystem.out.println(c3);//返回true,实际应该返回false\n});\n\nrefT1.start();\nrefT2.start();\n}\n}\nCAS

描述:第一个线程取到了变量x的值A,然后巴拉巴拉干别的事,总之就是只拿到了变量x的值A。这段时间内第二个线程也取到了变量x的值A,然后把变量x的值改为B,然后巴拉巴拉干别的事,最后又把变量x的值变为A(相当于还原了)。在这之后第一个线程终于进行了变量x的操作,但是此时变量x的值还是A,所以compareAndSet操作是成功。

例子描述(可能不太合适,但好理解):年初,现金为零,然后通过正常劳动赚了三百万,之后正常消费了(比如买房子)三百万。年末,虽然现金零收入(可能变成其他形式了),但是赚了钱是事实,还是得交税的!

如图所示,线程A进行CAS逻辑,在从内存中获取到var值到开始进行逻辑之间(对应图中笑脸处),会有一个时间差;如果刚好在这个时间差内,有其他某线程对var做了一系列的操作,但最后又恢复了var的值,即:出现“偷梁换柱”的情况;虽然此时线程A仍然能CAS成功,但是中间多出的那些过程仍然可能引发问题。

我们可以通过加一个标识来解决这个问题;即:所有要用到某一共享引用的线程,如果在用到该引用时,都对该引用对应的标识进行推进的话,那么CAS在进行“上图中笑脸前笑脸后”对比时,除了要对比原来的引用(上图中的A)外,还要对比标识的值是否一样,这样就解决了ABA问题。

好了,文章到这里就结束啦,如果本次分享的atomic是什么意思?用法、例句和Atomic原子类介绍问题对您有所帮助,还望关注下本站哦!

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023