请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

ABA问题怎么解:AtomicStampedReference和AtomicMarkableReference

[复制链接]
查看: 57|回复: 0

2万

主题

3万

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
79479
发表于 2020-1-14 14:46 | 显示全部楼层 |阅读模式
本博客系列是进修并发编程进程中的记载总结。由于文章比力多,写的时候也比力散,所以我整理了个目录贴(传送门),方便查阅。
并发编程系列博客传送门
并发编程的基石——CAS机制这篇文章中先容到CAS机制有一个弱点就是ABA题目:CAS在操纵的时候会检查变量的值能否被更悔改,假如没有则更新值,可是带来一个题目是:假如值最起头的值是A,接着酿成B,末端又酿成了A。经过检查这个值确切没有修悔改,是以CAS机制会更新这个值。可是现实上这个值已经被修悔改了。
AtomicStampedReference和AtomicMarkableReference就是用来治理CAS中的ABA题目标。他们治理ABA题目标道理类似,都是经过一个版本号来区分有没被更新过。

  • AtomicStampedReference:带版本戳的原子援用典范,版本戳为int典范。
  • AtomicMarkableReference:带版本戳的原子援用典范,版本戳为boolean典范。
AtomicStampedReference操纵列子
  1. public class AtomicStampedReferenceDemo {    private static Long var = new Long(1);    public static void main(String[] args) {        AtomicStampedReference referenceDemo = new AtomicStampedReference(var,1);        System.out.println("now value:"+referenceDemo.getReference().intValue());        int stamp = referenceDemo.getStamp();        System.out.println("now stamp:"+stamp);        boolean b = referenceDemo.compareAndSet(var, new Long(2), stamp, stamp + 1);        if(b){            System.out.println("success set value...");            System.out.println("now value:"+referenceDemo.getReference().intValue());            stamp = referenceDemo.getStamp();            System.out.println("now stamp:"+stamp);        }else {            System.out.println("failed set value...");            System.out.println("now value:"+referenceDemo.getReference().intValue());            stamp = referenceDemo.getStamp();            System.out.println("now stamp:"+stamp);        }    }}
复制代码
AtomicMarkableReference操纵

关于AtomicMarkableReference的道理实在是与AtomicStampedReference类似的。
区分是AtomicMarkableReference的版本戳是boolean典范,所以致使版本状态只要两个:true大要false。
所以,我更偏向于称呼AtomicMarkableReference为带标志的原子援用典范。

  • 版本戳 = true,表示此援用被标志。
  • 版本戳 = false,表示此援用未被标志。

免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 妈妈网-中国妈妈第一,是怀孕、育儿、健康等知识交流传播首选平台 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表