我们有两个线程 J1 和 J2。我们如何确保线程 J2 仅在 J1 完成执行后才运行,而不使用join()
方法。
问问题
179 次
3 回答
4
很简单,使用CountDownLatch
.
将 中的 初始化CountDownLatch
为 1 main()
。将其传递给 J1 和 J2。J2 只是使用 . 等待 Latch 变为 0 await()
。使用 完成后,J2 将其设置为 0 countDown()
,指示 J1 开始。
于 2013-05-12T16:18:15.753 回答
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 对象终止时通知它
于 2013-05-12T15:43:03.280 回答
0
实现此目的的另一种方法是使用 锁
class X {
private final ReentrantLock lock = new ReentrantLock();
// ...
public void m() {
lock.lock(); // block until condition holds
try {
// ... method body
} finally {
lock.unlock()
}
}
}
于 2013-05-12T16:34:30.507 回答