文章详情页
java - 如何理解AtomicInteger里的CAS操作?
浏览:83日期: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. javascript - npm下载的模块不完整是什么问题?2. java - Spring事务回滚问题3. apache - 本地搭建wordpress权限问题4. python - 管道符和ssh传文件5. node.js - 我想让最后进入数据库的数据,在前台最先展示,如何做到?6. wordpress - Nginx中禁止访问txt,robots.txt文件例外,规则该怎么写?7. 刚放到服务器的项目出现这中错误,有高手指点吗8. python - django 按日归档统计订单求解9. python 操作mysql如何经量防止自己的程序在之后被恶意注入(说白了就是问一下python防注入的一些要点)10. mysql - 面试题:如何把login_log表转换成last_login表?
排行榜
