文章详情页
java - 如何理解AtomicInteger里的CAS操作?
问题描述
下面这个方法,我不理解
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. css3的transform问题2. angular.js - angular.ui:dropdown的下拉菜单关闭的偶尔失常问题3. css - 移动端 oppo 手机之 Border-radius4. 关于《Effective Java中文版(第2版)》的问题5. javascript - html5显示隐藏6. Angular.js 无法设置Authorization头,该怎么解决?7. angular.js - angularjs ng-repeat 不能刷新8. 如何解决Centos下Docker服务启动无响应,且输入docker命令无响应?9. javascript - 关于圣杯布局的一点疑惑10. javascript - vue2.0中,$refs对象为什么用驼峰的方式获取不到属性?
排行榜