如果我这样做,我的程序工作得非常好:
if (atomicBoolean1.get() == false && atomicBoolean2.get() == true
&& !atomicBoolean1.compareAndSet(false, true)) {
continue;
}
现在,如果我这样做,一切都会破裂:
if (atomicBoolean1.get() == false && atomicBoolean2.get() == true) {
continue;
}
if (!atomicBoolean1.compareAndSet(false, true)) {
continue;
}
我疯了吗?
答案 0 :(得分:3)
continue
跳转到下一次迭代。
他们俩都不一样。同样应该是
if (atomicBoolean1.get() == false && atomicBoolean2.get() == true) {
if (!atomicBoolean1.compareAndSet(false, true)) {
continue;
}
}
答案 1 :(得分:0)
实际上,在上述两种情况下你并没有完全相同的事情。
在case1中,
atomicBoolean1.get() == false && atomicBoolean2.get() == true
如果仅满足2个条件,
atomicBoolean1.compareAndSet(false, true)
函数正在调用。
但是在case2中,
atomicBoolean1.get() == false && atomicBoolean2.get() == true
如果满足上述2个条件,则返回循环开始。 所以不会打电话
atomicBoolean1.compareAndSet(false, true)
如果这两个条件失败,则会调用
atomicBoolean1.compareAndSet(false, true)
我想,我可能会有任何问题。
让我们提供有关您的计划以及您要执行的操作的更多详细信息。 它可能有助于找出问题。