【问题标题】:Java multithreading, capture updated boolean variables [duplicate]Java多线程,捕获更新的布尔变量[重复]
【发布时间】:2020-09-02 15:30:30
【问题描述】:

我想做这样的事情

while (true) {
    if (my_boolean) {  //my_boolean is being updated by other threads
        do something;
        break;
    }
    do something else;
} 

我的问题是,my_boolean 正在由另一个线程中的另一个方法更新。有时可以捕获此类更新,有时则不能。有没有一致的方法来解决这个问题?

【问题讨论】:

  • 使用AtomicBoolean
  • 或者使布尔值可变。
  • 投反对票。检查任何 java 多线程教程。或者在发布问题之前在 StackOverflow 中搜索。这个问题已经被问过很多次了。

标签: java


【解决方案1】:

您可以将该布尔值声明为volatile

【讨论】:

  • 您不必这样做。还有其他方法可以达到相同的效果。
  • 如果有多个线程写入该变量,这也可能导致竞争条件。
  • @Andy Turner:我不明白你的意思。我没有说我的解决方案是唯一可能的解决方案。好吧,“必须”这个词可能会被误解。
  • @DorianGray "must" 暗示别无选择:它是absolute requirement
  • 已编辑。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
相关资源
最近更新 更多