Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
相同的条件逻辑为Java中的原子布尔生成两个非常不同的字节码。为什么?_Java_Multithreading_Concurrency_Cas_Locks - Fatal编程技术网

相同的条件逻辑为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哦,不,真是个愚蠢的错误。我老了。它们在逻辑上并不相同。对不起(