【发布时间】:2025-12-01 15:05:03
【问题描述】:
我发现了一段代码,其中线程似乎饿死了。下面是一个简化的例子。这是饥饿的例子吗?线程不终止的原因是什么?
注意:将睡眠更改为 1 有时会导致终止。注释掉的 Thread.yield() 将解决问题(对我来说)。
public class Foo {
public static boolean finished = false;
public static void main(String[] args) {
Runnable worker = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finished = true;
}
};
new Thread(worker).start();
while (!finished) {
// Thread.yield();
}
}
}
【问题讨论】:
-
尝试将
finished声明为volatile
标签: java multithreading