我们有两个线程J1和J2。我们如何确保线程J2仅在J1完成执行后才运行,而不使用join()
方法。
答案 0 :(得分:4)
简单,使用CountDownLatch
。
在CountDownLatch
中将main()
初始化为1。将它传递给J1和J2。 J2只是等待使用await()
将Latch变为0。 J2使用countDown()
完成后将其设置为0,表示J1开始。
答案 1 :(得分:1)
我认为这与Thread.join正在做的非常接近
public class Test1 {
public static void main(String[] args) throws Exception {
Thread t = new Thread();
synchronized (t) {
t.start();
while (t.isAlive()) {
t.wait();
}
}
}
}
注意魔术 - 某事唤醒了t.wait() - 这是因为JVM在终止时通知了Thread对象
答案 2 :(得分:0)
实现此目标的另一种方法是使用Locks
class X {
private final ReentrantLock lock = new ReentrantLock();
// ...
public void m() {
lock.lock(); // block until condition holds
try {
// ... method body
} finally {
lock.unlock()
}
}
}