【发布时间】:2016-09-05 11:01:45
【问题描述】:
我想等到线程进入等待状态。我一直在尝试使用 join(见下文),但它没有用。如何做到这一点?
public Test() {
System.out.print("Started");
Thread thread = new Thread(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (Test.class) {
try {
Test.class.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print("Done");
}
Done 永远不会被打印出来。
【问题讨论】:
-
那是因为 Test.class 永远不会被通知。你到底想做什么?等待一些异步操作完成?然后使用期货 ...
-
您意识到您的线程没有做任何有用且不需要的事情,因此这根本无法证明您正在尝试做什么。
-
我建议研究倒计时锁存器。我以前在 GUI 和 SwingWorkers 上遇到过类似的问题。锁存器的工作方式是您定义需要多少个(如果您有 2 个线程,则需要一个带有输入参数 2 的锁存器)。您将闩锁传递给线程的构造函数,然后在线程完成时执行闩锁.countdown()。在你的程序的主要部分你会做latch.wait()。一旦锁存器达到 0,程序将继续。希望这会有所帮助
标签: java multithreading join wait