『阿里巴巴』Java并发编程之CAS第三篇-CAS的缺点( 三 )
我们来看看 , 使用带有时间戳的原子引用类解决ABA问题的代码:
1:声明共享变量
static AtomicStampedReference<Integer> atomicStampedReference = new AtomicStampedReference<>(1271);
(需要说明 , 如果用数值做demo的话 , 主要int的取值范围 。 如果大于127 , 就会始终返回false 。 因为 Integer(128) == Integer(128)返回的是false)
线程一先修改执行一个ABA的过程:
编辑
执行完成之后 , 当前的主内存中版本号应该是3了 。
我们在用线程2来执行compareAndSet:
此时 , 在线程2中的版本号:tamp应该是1 , 但是主内存中的版本号已经是3了 。 所以执行后返回false.执行不成功的 。
我们来看看运行结果和我们预期结果:
运行结果 , 和我们预期结果是一致的 。 说明 , 添加这个时间戳(版本号)可以解决ABA问题
- [科旅号]并发现气辉现象,火星内部很危险,NASA洞察号证实火星地震活跃
- 『产业气象站』阿里巴巴类似字节跳动,京东类似媒体
- 开源中国@33 计划使用 OpenJDK 11 作为默认 Java 版本,Fedora
- 「中国发展网」阿里巴巴帮助湖北农产品把时间抢回来,盒马采购湖北10亿元小龙虾运往全国
- 「财报网」罗曼电动牙刷×阿里巴巴设计团队联手打造小心机电动牙刷,新品首发
- Java架构师技术栈分享■request body读取流程详解,nginx
- 『中国周刊』实力彰显!同益空气能热水系统服务阿里巴巴客服中心
- 【美股研究社】韵达股份直线涨停,传阿里巴巴计划收购韵达至少10%股份
- 摇钱树壹号▲还拒绝华为,孙正义意欲何为,日本首富不仅套现阿里巴巴股份
- [科技E观察]搭建学术研究与工业落地的桥梁,阿里巴巴开源大型3D家具数据集