相同的条件逻辑为Java中的原子布尔生成两个非常不同的字节码。为什么?
如果我这样做,我的程序运行得非常好:相同的条件逻辑为Java中的原子布尔生成两个非常不同的字节码。为什么?,java,multithreading,concurrency,cas,locks,Java,Multithreading,Concurrency,Cas,Locks,如果我这样做,我的程序运行得非常好: if (atomicBoolean1.get() == false && atomicBoolean2.get() == true && !atomicBoolean1.compareAndSet(false, true)) { continue; } 如果我这样做,一切都会破裂: if (atomicBoolean1.get() == false && atomicBoolean2.g
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;
}
我疯了吗?
继续
跳到下一个迭代
它们都不一样。应该是一样的
if (atomicBoolean1.get() == false && atomicBoolean2.get() == true) {
if (!atomicBoolean1.compareAndSet(false, true)) {
continue;
}
}
继续
跳到下一个迭代
它们都不一样。应该是一样的
if (atomicBoolean1.get() == false && atomicBoolean2.get() == true) {
if (!atomicBoolean1.compareAndSet(false, true)) {
continue;
}
}
继续
跳到下一个迭代
它们都不一样。应该是一样的
if (atomicBoolean1.get() == false && atomicBoolean2.get() == true) {
if (!atomicBoolean1.compareAndSet(false, true)) {
continue;
}
}
继续
跳到下一个迭代
它们都不一样。应该是一样的
if (atomicBoolean1.get() == false && atomicBoolean2.get() == true) {
if (!atomicBoolean1.compareAndSet(false, true)) {
continue;
}
}
事实上,在上述两种情况下,您并没有做完全相同的事情 在案例1中
atomicBoolean1.get() == false && atomicBoolean2.get() == true
如果仅满足上述两个条件
atomicBoolean1.compareAndSet(false, true)
函数正在调用
但在案例2中
atomicBoolean1.get() == false && atomicBoolean2.get() == true
如果满足上述两个条件,则返回循环启动。
所以我不会打电话
atomicBoolean1.compareAndSet(false, true)
如果这两个条件仅失败,它将调用
atomicBoolean1.compareAndSet(false, true)
我想,我可能会引起任何问题
让我们提供更多关于您的程序和您正在尝试执行的操作的详细信息。
这可能有助于解决问题。事实上,在上述两种情况下,您所做的事情并不完全相同 在案例1中
atomicBoolean1.get() == false && atomicBoolean2.get() == true
如果仅满足上述两个条件
atomicBoolean1.compareAndSet(false, true)
函数正在调用
但在案例2中
atomicBoolean1.get() == false && atomicBoolean2.get() == true
如果满足上述两个条件,则返回循环启动。
所以我不会打电话
atomicBoolean1.compareAndSet(false, true)
如果这两个条件仅失败,它将调用
atomicBoolean1.compareAndSet(false, true)
我想,我可能会引起任何问题
让我们提供更多关于您的程序和您正在尝试执行的操作的详细信息。
这可能有助于解决问题。事实上,在上述两种情况下,您所做的事情并不完全相同 在案例1中
atomicBoolean1.get() == false && atomicBoolean2.get() == true
如果仅满足上述两个条件
atomicBoolean1.compareAndSet(false, true)
函数正在调用
但在案例2中
atomicBoolean1.get() == false && atomicBoolean2.get() == true
如果满足上述两个条件,则返回循环启动。
所以我不会打电话
atomicBoolean1.compareAndSet(false, true)
如果这两个条件仅失败,它将调用
atomicBoolean1.compareAndSet(false, true)
我想,我可能会引起任何问题
让我们提供更多关于您的程序和您正在尝试执行的操作的详细信息。
这可能有助于解决问题。事实上,在上述两种情况下,您所做的事情并不完全相同 在案例1中
atomicBoolean1.get() == false && atomicBoolean2.get() == true
如果仅满足上述两个条件
atomicBoolean1.compareAndSet(false, true)
函数正在调用
但在案例2中
atomicBoolean1.get() == false && atomicBoolean2.get() == true
如果满足上述两个条件,则返回循环启动。
所以我不会打电话
atomicBoolean1.compareAndSet(false, true)
如果这两个条件仅失败,它将调用
atomicBoolean1.compareAndSet(false, true)
我想,我可能会引起任何问题
让我们提供更多关于您的程序和您正在尝试执行的操作的详细信息。
这可能有助于解决问题。Wow!!!!!为什么?我有两个分支而不是一个?逻辑上是一样的,所以现在我很困惑。现在你的两个条件独立工作。你必须把它们相互联系起来。:)@JohnPrestine,当你做“继续”时,它不会转到“下一行”。也许你误解了“继续”的说法。@anonymous哦,不,真是个愚蠢的错误。我老了。它们在逻辑上并不相同。对不起(哇!!!!!为什么?我有两个分支而不是一个?逻辑上是一样的,所以现在我很困惑。现在你的两个条件独立工作。你必须将它们彼此关联起来。:@JohnPristine,当你执行“继续”时,它不会转到“下一行”。也许你误解了“继续”的说法。@anonymous哦,不,真是个愚蠢的错误。我老了。它们在逻辑上并不相同。对不起(哇!!!!!为什么?我有两个分支而不是一个?逻辑上是一样的,所以现在我很困惑。现在你的两个条件独立工作。你必须将它们彼此关联起来。:@JohnPristine,当你执行“继续”时,它不会转到“下一行”。也许你误解了“继续”的说法。@anonymous哦,不,真是个愚蠢的错误。我老了。它们在逻辑上并不相同。对不起(哇!!!!!为什么?我有两个分支而不是一个?逻辑上是一样的,所以现在我很困惑。现在你的两个条件独立工作。你必须将它们彼此关联起来。:@JohnPristine,当你执行“继续”时,它不会转到“下一行”。也许你误解了“继续”的说法。@anonymous哦,不,真是个愚蠢的错误。我老了。它们在逻辑上并不相同。对不起(