Как заставить поток ждать, пока не закончится дочерняя нить?
Я хочу перезапустить мой Main в цикле, пока пользователь не остановит его. Я создал новый класс также с методом main и вызываю main в цикле while(true). К сожалению, это не принесло желаемого эффекта. Потому что он не ждет, пока завершится другой основной, а просто перезапустится, пока мой оперативный компьютер не заполнится и программа не будет работать.
public class Main {
public static void main(String[] args) throws InterruptedException {
boolean run=true;
while(true) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
OldMain.main(args);
}
});
t.start();
t.join();
}
}
Как я могу заставить цикл ждать окончания OldMain.main(args)?
1 ответ
Решение
Вы можете использовать CountDownLatch для ожидания основного метода, чтобы дождаться завершения всех остальных потоков. Вы можете настроить номер потока, требуемый числом в аргументе.
Пример:
public class Main {
public static void main(final String[] args) throws InterruptedException {
boolean run = true;
CountDownLatch latch = new CountDownLatch(1);
final MyClass myClass = new MyClass(latch);
Thread t = new Thread(new Runnable() {
@Override
public void run() {
myClass.doMyWork(args);
}
});
t.start();
latch.await();
t.join();
}
}
class MyClass {
private CountDownLatch latch;
public MyClass(CountDownLatch latch) {
this.latch = latch;
}
public void doMyWork(String[] args) {
for (int i = 0; i < 1000; i++) {
System.out.println(i);
}
latch.countDown();
}
}