什么是ABA题目?Java内里的原生办理打算是什么?
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调查是否有变革,并配置新值。运行一下看当作果: (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |