首先使用AtomicInteger安全检查

Jim*_*Jim 4 java concurrency multithreading atomic

如何在AtomicInteger变量中执行"check-then-act" ?
也就是说,根据结果​​,首先检查这样一个变量和inc/dec 的最安全/最好的方法是什么?
例如(在高级别)
if(count < VALUE) count++;//原子地使用AtomicInteger

rua*_*akh 10

你需要写一个循环.假设这count是你的AtomicInteger参考,你会写如下:

while(true)
{
    final int oldCount = count.get();
    if(oldCount >= VALUE)
        break;
    if(count.compareAndSet(oldCount, oldCount + 1))
        break;
}
Run Code Online (Sandbox Code Playgroud)

以上将循环:(1)您的if(count < VALUE)条件不满意; 或(2)count成功递增.使用compareAndSet执行增量可以保证在设置新值时值count仍然oldCount(因此仍然小于VALUE).