如何在AtomicInteger
变量中执行“check-then-act”?
I.e.什么是最安全/最好的方法来检查这种变量的值第一个和inc/dec取决于结果?
例如(高级别)
if(count < VALUE) count++;
//原子级使用AtomicInteger
安全地使用AtomicInteger首先检查
4
A
回答
10
您需要编写一个循环。假设count
是你AtomicInteger
参考,你会写是这样的:
while(true)
{
final int oldCount = count.get();
if(oldCount >= VALUE)
break;
if(count.compareAndSet(oldCount, oldCount + 1))
break;
}
上面会循环,直到:(1)你的if(count < VALUE)
条件未得到满足;或(2)count
成功递增。使用compareAndSet
执行增量操作可以保证当我们设置新值时,count
的值仍然是oldCount
(因此仍然小于VALUE
)。
0
如果你使用Java 8,你可以像这样解决它。它是线程安全的并且是以原子方式执行的。
AtomicInteger counter = new AtomicInteger();
static final int COUNT = 10;
public int incrementUntilLimitReached() {
return counter.getAndUpdate((n -> (n < COUNT) ? n + 1 : n));
}
相关问题
- 1. 首先检查时间戳吗?
- 2. 安全地检查'this`是否为空
- 3. 使用MD5和盐j安全检查
- 4. 如何安全地使用Jquery检查属性值?
- 5. Grails安全检查
- 6. Java首选项本地安全存储
- 7. LibGDX - 安全地使用“首选项”存储高分
- 8. ASP.Net MVC:IAuthorizationFilter /属性首选安全检查登录?
- 9. 如何使用AtomicInteger?
- 10. 安全地检索密钥
- 11. 安全地修改std :: pair <U, V> ::首先在对的向量?
- 12. 春季安全登录2FA - 首先检查用户名和密码,然后根据需要询问2FA代码
- 13. Freemarker的空例外,即使检查它首先
- 14. 如何使用Bootstrap 4首先使用媒体查询最大宽度:767px首先使用Bootstrap 4
- 15. PHP安全会话检查?
- 16. 是http_x_forwarded_for安全检查IP
- 17. 春季安全检查用户有RoleGroup
- 18. 服务外观调用 - 安全检查
- 19. 检查是否进入上传/使用安全使用AWS IAM
- 20. 首先调用DLL
- 21. 首先Android应用
- 22. 有没有办法检查我是否可以安全地使用Page.IsValid?
- 23. 允许检查第二个复选框,如果首先在JavaScript中检查
- 24. 我必须首先完全安装VS2008,然后使用升级许可证密钥安装VS2010吗?
- 25. 如何使用存储函数安全地检索sql数据
- 26. 如何安全检查用户名是否已被使用?
- 27. 使用GET变量检查用户登录会话安全吗?
- 28. 未定义的方法`end_with?'为零:NilClass,但首先检查零
- 29. 如何检查首先是否被跳过?
- 30. 如何检查C中首先评估哪个表达式?
http://stackoverflow.com/questions/4818699/practical-uses-for-atomicinteger – user219882 2012-03-30 11:26:50
@Tomas:我没有看到一个答案在你link.Only如何使用it.How可以我原子地做一个check-then-act? – Jim 2012-03-30 11:31:12