Я бы рекомендовал использовать механизм ожидания / уведомления, встроенный во все объекты Java (или использовать новый код блокировки в Java 5 ).
Поток 1 (ожиданиедля темы 2)
while(!thread2.isDone()) {
synchronize(thread2.lockObject) {
thread2.lockObject.wait();
}
}
Тема 2
// finish work, set isDone=true, notify T1
thread2.lockObject.notify();
'lockObject' - просто обычный объект (Object lockObject = new Object ()) - все объекты Java поддерживают вызовы wait / notify.
После этого последнего вызова notify () Thread1 проснется, достигнет вершины времени и увидит, что T2 теперь завершен,и продолжить выполнение.
Вы должны учитывать исключения прерываний и тому подобное, но использование wait / notify чрезвычайно полезно для подобных сценариев.
Если вы используете существующий код, с или без снаВы сжигаете огромное количество циклов, делая ничего ... и это никогда не бывает хорошо.
ADDENDUM
Я вижу много комментариевГоворя об использовании join - если ожидающий поток выполнения завершится, тогда да, используйте jойн.Если у вас есть два параллельных потока, которые выполняются постоянно (например, поток производителя и потребитель), и они не «завершаются», они просто работают в режиме блокировки друг с другом, тогда вы можете использовать парадигму ожидания / уведомления Iпредоставлено выше.