AtomicnIteger会存在ABA问题吗?

bug师姐 2019-07-14 09:51:18
看AtomicnIteger的如下源码,觉得它会存在ABA问题
public final int incrementAndGet() {
for (;;) {
int current = get(); // 获取旧值
int next = current + 1; // 新值
// 比较成功后赋值
if (compareAndSet(current, next))
return next;
}
}


JDK8源码如下,看着好像不会,具体不是太清楚,毕竟unsafe作了啥操作我也不知道啊
public final int incrementAndGet() {
return unsafe.getAndAddInt(this, valueOffset, 1) + 1;
}


value被volatile修饰了,是不是就不会有ABA问题了,因为我觉得volatile保证了可见性。


具体还麻类懂的大神赐教!!1
...全文
328 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
大金毛子 2019-07-16
  • 打赏
  • 举报
回复
不要用基本类型以及String测试,他们本身就是不存在线程安全问题,修改自然可以成功
bug师姐 2019-07-16
  • 打赏
  • 举报
回复
引用 5 楼 huanqingdong 的回复:
引用 4 楼 zcl_love_wx 的回复:
[quote=引用 3 楼 huanqingdong 的回复:]
一直增加不会存在,出现了B说明B大于A,不可能有线程往下减数再回到A
是我写得不全,这样说哈,比如我们用AtomicnIteger统计在线人数,这个人数是时而增,时而减的,这样会出现ABA问题吗


如果不是往一个方向改会有aba问题

可以用带版本的类解决 AtomicStampedReference 和 AtomicMarkableReference [/quote]
我测了测,如果是用incrementAndGet和decrementAndGet实现加和减,就不会有问题。有ABA问题的是直接用compareAndSet赋值
bug师姐 2019-07-16
  • 打赏
  • 举报
回复
引用 1 楼 wxgxgp 的回复:
不会,会追加版本号

我测了下,会有ABA问题的。我用的compareAndSet方法试了试,即使被另外两个线程修改后(一个线程修改,另一个线程把值修改回来),当前线程的修改还是会成功。
faith.huan 2019-07-15
  • 打赏
  • 举报
回复
引用 4 楼 zcl_love_wx 的回复:
引用 3 楼 huanqingdong 的回复:
一直增加不会存在,出现了B说明B大于A,不可能有线程往下减数再回到A
是我写得不全,这样说哈,比如我们用AtomicnIteger统计在线人数,这个人数是时而增,时而减的,这样会出现ABA问题吗
如果不是往一个方向改会有aba问题 可以用带版本的类解决 AtomicStampedReference 和 AtomicMarkableReference
faith.huan 2019-07-15
  • 打赏
  • 举报
回复
一直增加不会存在,出现了B说明B大于A,不可能有线程往下减数再回到A
bug师姐 2019-07-15
  • 打赏
  • 举报
回复
引用 3 楼 huanqingdong 的回复:
一直增加不会存在,出现了B说明B大于A,不可能有线程往下减数再回到A
是我写得不全,这样说哈,比如我们用AtomicnIteger统计在线人数,这个人数是时而增,时而减的,这样会出现ABA问题吗
bug师姐 2019-07-14
  • 打赏
  • 举报
回复
我在网上看到说,会有ABA问题。还是说旧版本会有ABA问题,新版本没有ABA问题呀???
大金毛子 2019-07-14
  • 打赏
  • 举报
回复
不会,会追加版本号
内容概要:本文研究了计及需求侧响应的日前、日内两阶段鲁棒备用优化问题,提出了一种基于数据驱动的两阶段分布鲁棒优化方法,结合1-范数和∞-范数构造不确定性集合,有效刻画风电、光伏出力及负荷等多重不确定因素的波动特性。研究构建了电热综合能源系统的联合优化模型,通过协调日前调度计划与日内实时调整,充分发挥需求侧响应资源的灵活调节能力,提升系统在不确定性环境下的备用充裕性与运行鲁棒性,并采用Matlab进行建模与仿真验证,结果表明该方法在保障系统安全的同时显著改善了经济性。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的研究生、科研人员,以及从事新型电力系统调度、综合能源系统规划与运行的工程技术人员。; 使用场景及目标:①应用于高比例可再生能源接入背景下电力系统备用容量的优化配置;②为综合能源系统在多重不确定性下的鲁棒调度提供决策支持;③支撑需求侧资源参与系统辅助服务的机制设计与仿真验证,推动源荷互动协调发展。; 阅读建议:建议读者结合Matlab代码深入理解两阶段鲁棒优化的建模过程,重点关注不确定性集构建、鲁棒约束转化及C&CG等求解算法的实现细节,可进一步拓展至其他分布鲁棒优化形式或耦合更多能源形式的综合能源系统场景。

51,407

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧