文章详情页
java - 如何理解AtomicInteger里的CAS操作?
浏览:212日期:2024-01-28 18:39:07
问题描述
下面这个方法,我不理解
public final int getAndIncrement() { for (;;) {int current = get();int next = current + 1;if (compareAndSet(current, next)) return current; }}
为何要循环直到成功?如果这期间有另外的线程更改了value,导致compareAndSet()返回false,那这就表面已经不是原子性了吧,还继续重复有啥意义?
问题解答
回答1:它只是要实现写操作不会被覆盖掉,多线程情况下不会计算错误,如果按照你这么想要实现原子性,只能使用锁了,但是这样效率会低。
标签:
java
上一条:既然 Java 的垃圾回收机制能够自动的回收内存,怎么还会出现内存泄漏的情况呢下一条:java - Android studio 新项目运行结果都是Process finished with exit code 0
相关文章:
1. docker不显示端口映射呢?2. css3 - 没明白盒子的height随width的变化这段css是怎样实现的?3. docker网络端口映射,没有方便点的操作方法么?4. javascript - 关于js原生事件的绑定与解除绑定5. css3 - 新版支付宝 账单页面滑动时月份栏被下一个月给顶上去是什么效果6. node.js - nojs的response.write()如何返回一个html7. 关于docker下的nginx压力测试8. 把h5放入webview里面,h5页面上下可以回弹,怎么可以去掉该效果9. javascript - yo创建angular报错10. javascript - nodejs报错 打开localhost:3000 就报错
排行榜

网公网安备