Предположим, у меня есть главный апад. В этом основном потоке создаю и запускаю 5 потоков. Затем мой основной поток должен дождаться завершения одного из этих предыдущих созданных потоков. Когда такой поток завершен, мой основной поток должен создать и запустить другой поток, так что всегда есть 5 (или меньше) потоков. Итак, мой вопрос: есть ли что-то вроде CountDownLatch, которое позволяет мне ждать, когда достигнут верхний порог?Подождите, пока некоторые потоки закончатся
-3
A
ответ
1
Рассмотрите возможность использования пула потоков. Во всяком случае, приведенный ниже код делает то, о чем вы просите.
import java.util.concurrent.atomic.AtomicInteger;
public class Main {
public static void main(String[] args) throws InterruptedException {
final AtomicInteger atomicInteger = new AtomicInteger(0);
for (;;) {
while (atomicInteger.get() < 5) {
atomicInteger.getAndIncrement();
Thread t = new Thread() {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
atomicInteger.getAndDecrement();
};
};
t.start();
}
Thread.sleep(100);
}
}
}
+0
В конце концов, я просто использовал пул потоков. Но да, это ответит на мой вопрос. –
Смежные вопросы
- 1. Подождите, пока все потоки в Исполнителе закончатся?
- 2. В c, как сделать поток, подождите, пока другие потоки закончатся
- 3. подождите, пока все потоки закончатся - поток каталога файлов
- 4. Вычислить несколько значений параллельно. Подождите, пока все потоки закончатся.
- 5. Подождите, пока несколько веб-мастеров закончатся
- 6. JavaScript Подождите, пока все асинхронные вызовы закончатся
- 7. Подождите, пока пустые потоки завершатся
- 8. Как заставить потоки производителей подождать, пока потребительские потоки закончатся
- 9. Ждите, пока потоки не закончатся, прежде чем запускать их снова
- 10. Подождите, пока все $ http-звонки закончатся в Angular
- 11. Подождите, пока все параллельные потоки Qt закончил
- 12. Подождите, пока все задачи на ThreadPool не закончатся
- 13. Подождите, пока несколько методов с обратными вызовами закончатся
- 14. Подождите, пока методы делегата не закончатся в ios
- 15. Подождите, пока методы async закончатся в цикле for
- 16. Подождите, пока все задания многопроцессорности не закончатся, прежде чем продолжить.
- 17. Подождите, пока потоки будут записывать изменения в shutdownhook
- 18. Подождите, пока addClass выполнит
- 19. Подождите, пока закончите две нити
- 20. Запустите два командных файла одновременно и подождите, пока оба не закончатся для запуска следующего
- 21. Подождите, пока ExecWB закончит
- 22. Подождите, пока обратный вызов
- 23. Подождите, пока «Записать полностью»
- 24. Подождите, пока запрос выполняется
- 25. Подождите, пока пользовательское разрешение
- 26. Подождите, пока не закончите?
- 27. Подождите, пока fs.readFileSync делается
- 28. Подождите, пока выйдет замок.
- 29. Подождите, пока NSURLSessionDataTask вернется
- 30. Подождите, пока задача вернется
Нужен ли основной поток? Просто добавьте обратный вызов/прослушиватель к вашим runnables. –
Возможный дубликат [Java Ожидание завершения потока] (http://stackoverflow.com/questions/4691533/java-wait-for-thread-to-finish) –
Вы можете проверить, завершен ли какой-либо из 5 потоков, если нет, то спать основной поток в течение определенного периода времени. Может быть добавлен слушатель, который будет уведомлять ваш основной поток, чтобы проснуться и создать новый поток. –