2014-12-16 6 views
-3

Предположим, у меня есть главный апад. В этом основном потоке создаю и запускаю 5 потоков. Затем мой основной поток должен дождаться завершения одного из этих предыдущих созданных потоков. Когда такой поток завершен, мой основной поток должен создать и запустить другой поток, так что всегда есть 5 (или меньше) потоков. Итак, мой вопрос: есть ли что-то вроде CountDownLatch, которое позволяет мне ждать, когда достигнут верхний порог?Подождите, пока некоторые потоки закончатся

+0

Нужен ли основной поток? Просто добавьте обратный вызов/прослушиватель к вашим runnables. –

+2

Возможный дубликат [Java Ожидание завершения потока] (http://stackoverflow.com/questions/4691533/java-wait-for-thread-to-finish) –

+0

Вы можете проверить, завершен ли какой-либо из 5 потоков, если нет, то спать основной поток в течение определенного периода времени. Может быть добавлен слушатель, который будет уведомлять ваш основной поток, чтобы проснуться и создать новый поток. –

ответ

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

В конце концов, я просто использовал пул потоков. Но да, это ответит на мой вопрос. –

Смежные вопросы