gpt4 book ai didi

java - 如何创建一个等待 boolean 变量变为 true 的线程?

转载 作者:行者123 更新时间:2023-12-02 06:16:06 25 4
gpt4 key购买 nike

我有一个函数,一旦 boolean 变量为 true 就需要调用它。我尝试在线程中使用 while 循环,但它不起作用。这是我尝试过的:

public class MyRunnable implements Runnable {

public void run() {
while (true) {
if (conditions == true) {
System.out.println("second");
break;
}
}
}

public static void main(String args[]) {
boolean condition = false;
(new Thread(new MyRunnable())).start();
System.out.println("first\n");
// set conndition to true
condition = true;

}

}

结果应该是:

first
second

最佳答案

不要忙等待此类情况。使用阻塞惯用法。对于您的简单情况,您可以使用new CountDownLatch(1)。首先,这是您的代码,但已修复为按您期望的方式编译和运行:

public class MyRunnable implements Runnable {
volatile boolean condition = false;

public void run() {
while (true) {
if (condition) {
System.out.println("second");
break;
}
}
}
public static void main(String args[]) {
final MyRunnable r = new MyRunnable();
new Thread(r).start();
System.out.println("first\n");
r.condition = true;
}
}

作为比较,带有 CountDownLatch 的程序:

public class MyRunnable implements Runnable {
final CountDownLatch latch = new CountDownLatch(1);

public void run() {
try { latch.await(); } catch (InterruptedException e) {}
System.out.println("second");
}

public static void main(String args[]) {
final MyRunnable r = new MyRunnable();
new Thread(r).start();
System.out.println("first\n");
r.latch.countDown();
}
}

要真正注意到差异,请在 println("first") 之后添加 Thread.sleep(20000)听到计算机风扇努力驱散第一个程序浪费的能量的声音。

关于java - 如何创建一个等待 boolean 变量变为 true 的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12884488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com