AtomicReference原子类如何在Java中使用

  介绍

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中使用