介绍
AtomicReference原子类如何在Java中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
AtomicReference是作用是对“对象“进行原子操作。
<强> AtomicReference函数列表强>
//使用零初始值创建新的AtomicReference。 AtomicReference ()//使用给定的初始值创建新的AtomicReference。 AtomicReference initialValue (V)//如果当前值==预期值,则以原子方式将该值设置为给定的更新值。 布尔compareAndSet (V, V更新)//获取当前值。 V get ()//以原子方式设置为给定值,并返回旧值。 V getAndSet (V newValue)//最终设置为给定值。 空白lazySet (V newValue)//设置为给定值。 空集(V newValue)//返回当前值的字符串表示形式。 字符串toString ()//如果当前值==预期值,则以原子方式将该值设置为给定的更新值。 布尔weakCompareAndSet (V, V更新)
<强>在JDK1.7.0_40中AtomicReference。java的源码如下:强>
公共类AtomicReferencejava实现。可序列化的{ 私有静态最终长serialVersionUID=-1848883965231344442 l;//获取不安全的对象、不安全的作用是提供CAS操作 私有静态最终不安全不安全=Unsafe.getUnsafe (); 私有静态最终长valueOffset; 静态{ 尝试{ valueOffset=unsafe.objectFieldOffset (AtomicReference.class.getDeclaredField (“value")); }捕捉(例外的前女友){抛出新的错误(ex);} }//类波动型 私人波动V值; 公共AtomicReference (V initialValue) { 值=https://www.yisu.com/zixun/initialValue; } 公共AtomicReference () { } 公众最终V get () { 返回值; } 公共最后空集(V newValue) { 值=newValue; } 公众最终无效lazySet (V newValue) { 不安全的。putOrderedObject (valueOffset, newValue); } 公众最终布尔compareAndSet (V, V更新){ 返回unsafe.compareAndSwapObject (valueOffset,期望、更新); } 公众最终布尔weakCompareAndSet (V, V更新){ 返回unsafe.compareAndSwapObject (valueOffset,期望、更新); } 公众最终V getAndSet (V newValue) { 而(真){ V x=(); 如果(compareAndSet (x, newValue)) 返回x; } } 公共字符串toString () { 返回String.valueOf (get ()); } }
说明:
AtomicReference的源码比较简单。它是通过“volatile"和“安全提供的CAS函数实现“原子操作。
(01)值是类波动型。这保证了:当某线程修改值的值时,其他线程看到的价值值都是最新值的值,即修改之后的挥发性的值。
(02)通过中科院设置值。这保证了:当某线程池通过中科院函数(如compareAndSet函数)设置的值时,它的操作是原子的,即线程在操作价值时不会被中断。
<强>//AtomicReferenceTest。java的源码强>
进口java.util.concurrent.atomic.AtomicReference; 公开课AtomicReferenceTest { 公共静态void main (String [] args) {//创建两个人对象,它们的id分别是101和102。 人p1=new (101); 人p2=new (102);//新建AtomicReference对象,初始化它的值为p1对象 AtomicReference ar=new AtomicReference (p1);//通过中科院设置ar。如果ar的值为p1的话,则将其设置为p2。 ar.compareAndSet (p1, p2); 人p3=(人)ar.get (); System.out.println (“p3“+ p3); System.out.println (“p3.equals (p1)=? p3.equals (p1)); } } 类人{ 挥发性长id; 公众人物(id) { 这一点。id=id; } 公共字符串toString () { 返回“id:“+身份证; } }
运行结果:
看完上述内容,你们掌握AtomicReference原子类如何在Java中使用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!AtomicReference原子类如何在Java中使用