加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

什么是ABA题目?Java内里的原生办理打算是什么?

发布时间:2021-06-03 07:52:37 所属栏目:编程 来源:互联网
导读:一、ABA题目 ABA题目是CAS机制中呈现的一个题目,他的描写是这样的。我们直接画一张图来演示, 什么意思呢?就是说一个线程把数据A变为了B,然后又从头酿成了A。

ABA题目是CAS机制中呈现的一个题目,他的描写是这样的。我们直接画一张图来演示,

什么意思呢?就是说一个线程把数据A变为了B,然后又从头酿成了A。此时其它一个线程读取的时辰,发明A没有变革,就误觉得是原本的谁人A。这就是著名的ABA题目。ABA题目会带来什么效果呢?我们举个例子。

一个小偷,把别人家的钱偷了之后又还了返来,照旧原本的钱吗,ABA题目也一样,假如欠好好办理就会带来大量的题目。最常见的就是资金题目,也就是别人假如调用了你的钱,在你发明之前又还了返来。可是别人却已经得罪了法令。

怎样去办理这个ABA题目呢,就是行使本日所说的AtomicStampedReference。

二、AtomicStampedReference

1、题目办理

我们先给出一个ABA的例子,对ABA题目举办场景重现。

public class AtomicTest { 

 private static AtomicInteger index = new AtomicInteger(10); 

 public static void main(String[] args) { 

  new Thread(() -> { 

   index.compareAndSet(10, 11); 

   index.compareAndSet(11, 10); 

   System.out.println(Thread.currentThread().getName()+ 

     ":10->11->10"); 

  },"张三").start(); 

   

  new Thread(() -> { 

   try { 

    TimeUnit.SECONDS.sleep(2); 

    boolean isSuccess = index.compareAndSet(10, 12); 

    System.out.println(Thread.currentThread().getName()+ 

      ":index是预期的10嘛,"+isSuccess 

      +"   配置的新值是:"+index.get()); 

   } catch (InterruptedException e) { 

    e.printStackTrace(); 

   } 

  },"李四").start(); 

 } 

在上面的代码中,我们行使张三线程,对index10->11->10的变革,然后李四线程读取index调查是否有变革,并配置新值。运行一下看当作果:

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读