我不想确定主线程中的某些代码会在辅助线程执行某些代码之后执行。这是我得到的:
final Object lock = new Object();
final Thread t = new Thread(new Runnable() {
public void run() {
synchronized(lock) {
System.out.println("qwerty");
lock.notify();
}
}
});
synchronized(lock) {
t.start();
lock.wait();
}
System.out.println("absolutely sure, qwerty is above");
- 这是正确的解决方案吗?
- 有没有更短的方法来做到这一点?
最佳答案
像 notify() 和 wait() 这样的东西实际上是低级同步原语。
您应该尽可能使用更高级别的抽象,例如在本例中,CountDownLatch。
以下只是一个可以帮助您入门的示例(例如,此处未考虑超时问题):
final CountDownLatch latch = new CountDownLatch(1);
final Thread t = new Thread(new Runnable() {
public void run() {
System.out.println("qwerty");
latch.countDown();
}
});
t.start();
latch.await();
System.out.println("absolutely sure, qwerty as been printed");
像 wait 和 notify 这样的低级事物实际上只是低级的 Java 特性,你不应该关心它们(除非你正在编写并发 API) .
此外,我建议阅读这本了不起的书:Java 并发实践。
关于java - 在 Java 中同步 2 个线程的更简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7042762/