Такие вещи, как 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 параллелизма). 1018 *
Кроме того, я бы предложил прочитать удивительную книгу: Параллелизм Java на практике .