Изменить:
О, вы говорите внутри самого Thread
объекта. Внутри join()
мы видим wait()
. Что-то вроде:
while (isAlive()) {
wait(0);
}
notify()
для этого обрабатывается подсистемой Thread
. Когда метод run()
завершается, notify()
вызывается для объекта Thread
. Я не уверен, что код, который на самом деле вызывает notify()
, можно увидеть - кажется, это сделано в нативном коде.
Не нужно, чтобы пользовательский код вызывал notify()
для этого Thread
объекта. Код Java Thread
обрабатывает это внутренне. После завершения потока вызов join()
вернется.
Например, следующий код выполнится нормально, а вызов join()
вернется нормально без вызовов wait()
или notify()
.
Thread thread = new Thread(new Runnable() {
public void run() {
// no-op, just return immediately
}
});
thread.start();
thread.join();
Важно отметить, что на такое поведение, вероятно, нельзя полагаться. Вызов notify()
является внутренним для системы потоков. Вам следует использовать join()
, если вы ожидаете окончания потока.