Предполагая, что вы пишете Java, вы можете использовать метод Thread.join (), чтобы заставить один поток ждать завершения другого. Например, если вы хотите, чтобы поток 1 ожидал завершения потока 2:
Thread Thread2 = new SomethingImplementingThread();
Thread Thread1 = new Thread(new Runnable() {
public Thread waitforthisone;
public void run() {
try {
waitforthisone.join();
} catch (InterruptedException e) {}
// Do stuff once waitforthisone has finished
});
Thread1.waitforthisone = Thread2;
Thread2.start();
Thread1.start(); // When thread 1 starts it will run Thread 2's join function, and thus
// wait for thread 2 to exit
NB. Команда wait в вашем коде заставит запущенный поток (в данном случае ни thread1, ни thread 2, а создающий их поток) wait () [строка 4], то есть перейдет в спящий режим. В частности, ожидающий поток может быть разбужен, только если другой поток (thread1 или thread2) вызывает first.notify (). Код, который вы представили выше, никогда не пройдет строку 4. В противном случае