gpt4 book ai didi

Java:空循环

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:06:23 25 4
gpt4 key购买 nike

我正在制作一个以这种方式执行的 while 循环程序:

  1. 主线程进入 while 循环。
  2. while 循环中没有任何反应。
  3. 线程将停留在 while 循环中,直到条件满足。
  4. 另一个线程运行满足上述条件的函数。

这是一个例子:

while(path != null);

类中还有另一个函数会将路径设置为 null,一旦发生这种情况,主线程应退出此循环。另一个函数在另一个线程中调用。

但是,即使将 path 设置为 null,主线程也不会退出循环。有什么建议吗?

代码:

try 
{
for (Node n:realpath)
{
Thread.sleep(100);
actor.walk(n);
}
Thread.sleep(100);
}
catch (InterruptedException ex)
{
Logger.getLogger(VNScreen.class.getName()).log(Level.SEVERE, null, ex);
}
realpath.clear();
path = null;

if(path == null)
System.out.println("NULLED PATH");

最佳答案

繁忙的等待是非常昂贵的。我会这样做:

Object LOCK = new Object(); // just something to lock on

synchronized (LOCK) {
while (path != null) {
try { LOCK.wait(); }
catch (InterruptedException e) {
// treat interrupt as exit request
break;
}
}
}

然后当你设置path为null时,调用

synchronized (LOCK) {
LOCK.notifyAll();
}

(如果两段代码在同一个对象中,您可以只在 this 上同步。)

关于Java:空循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8409609/

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