Я использую более 5 потоков в моем коде, когда основной метод выполняет все потоки, вызывается в начале, как только все потоки активны, я хочу, чтобы основной поток останавливался, пока все дочерние потоки не будут мертвы. Если я использую join() метод для любого потока, тогда все остальные дочерние методы также приостанавливаются. В моем случае мне нужно только приостановить основной поток.Как сделать основной поток, чтобы дождаться завершения всего дочернего потока?
0
A
ответ
3
Вам необходимо связаться с join
после того, как все темы уже созданы. то есть:
for(int i = 0; i < numThreads; i++) {
threads[i].start();
}
И только потом:
for(int i = 0; i < numThreads; i++) {
threads[i].join();
}
выше будет работать.
0
Вы должны использовать CountDownLatch
для этого:
Для основного потока
CountDownLatch latch = new CountDownLatch(5); //for 5 threads
for(int i = 0; i < 5; i++) {
new Thread(new Worker("thread " + i, latch)).start();;
}
latch.await(); //wait till all workers are dead
Для рабочего потока
priavte CountDownLatch;
public Worker(String name, CountDownLatch latch) {
this.name = name;
this.latch = latch;
}
public void run() {
try {
System.out.println(name + " done!");
} finally {
latch.countDown();//count down
}
}
Смежные вопросы
- 1. Как заставить основной (вызывающий) поток ждать завершения дочернего потока?
- 2. Сделать родительский поток ждать до завершения дочернего потока или таймаута
- 3. Как дождаться завершения SwingWorker?
- 4. Как дождаться завершения клонированного дочернего процесса вызывается?
- 5. Сделать основной поток wait до завершения URLRequest
- 6. Как дождаться завершения потока перед продолжением?
- 7. Ant build должен дождаться завершения дочернего процесса
- 8. Как дождаться завершения операции?
- 9. Сделать Android MainActivity дождаться окончания потока
- 10. Проблема многопоточности не может дождаться завершения потока
- 11. Почему основной поток ждет завершения еще одного потока?
- 12. Как заморозить основной поток из рабочего потока
- 13. Как главный поток может дождаться начала нового потока?
- 14. Как дождаться завершения всех задач без блокировки потока пользовательского интерфейса?
- 15. Как сделать .each() дождаться завершения каждой итерации
- 16. Использование $ .when(). Done(), чтобы дождаться завершения загрузки
- 17. Главный поток завершается до завершения потока задач
- 18. Как дождаться завершения дочернего компонента перед тем, как продолжить.
- 19. Android, как дождаться окончания потока и уведомления?
- 20. Как обеспечить, чтобы поток не был завершен до завершения финализатора
- 21. Как дождаться завершения System.Diagnostics.Process.Start
- 22. как сделать основной поток ждать другого, чтобы закончить в Java?
- 23. Как дождаться завершения webViewDidFinishLoad
- 24. Как дождаться завершения мангозы?
- 25. Как дождаться завершения деинсталляции?
- 26. Как дождаться завершения ADB?
- 27. Как дождаться завершения NSURLSession?
- 28. Android: Как я могу приостановить основной поток до завершения AsyncTask?
- 29. Как дождаться завершения ряда потоков?
- 30. Как дождаться завершения асинхронной пустоты?
Вы можете положить в какой-то код? Я хотел бы посмотреть, как и на что вы называете метод join. Метод join - лучший способ достичь того, что вы хотите сделать. Вероятно, вы, должно быть, делаете что-то неправильно, чтобы не работать. –
'Если я использую метод join() для любого потока, тогда все остальные дочерние методы также приостанавливаются', другие потоки не должны приостанавливаться. похоже, вы сделали что-то неправильное. – TomN