Как дождаться окончания всех потоков (с переменным числом потоков), чтобы перейти с Main? - PullRequest
2 голосов
/ 24 декабря 2010

Я создам много потоков в соответствии с пользовательским вводом в цикле for.Поэтому я не смогу назначить им имена.Есть ли способ подождать, пока все они закончат, чтобы перейти к моей основной теме?Я хочу, чтобы они закончили с этим для цикла.Я знаю, что мне нужно использовать объединение, но как я буду его использовать со множеством потоков?Или есть другой способ?Это будет так:

for(int i = 0; i<inputs.size(); i++)
  new SimpleThread(parameters).start();

продолжить только с основным потоком, другие закончили.

Как я могу это сделать?

Ответы [ 3 ]

7 голосов
/ 24 декабря 2010

Сохраните темы в List<Thread>, затем итерируйте список и используйте thread.join()

. Вы также можете взглянуть на java.util.concurrent вспомогательные средства.CyclicBarrier или CountDownLatch (как указано другими), например.

5 голосов
/ 24 декабря 2010

Используйте java.util.concurrent.CountDownLatch.Передайте его вместе с параметрами.

Также рассмотрите возможность использования java.util.concurrent.Executors.newFixedThreadPool() для управления жизненными циклами потоков (запуск, остановка потоков).

2 голосов
/ 24 декабря 2010

Создать защелку обратного отсчета в главном потоке, передаваемую темам, которые вы создали: http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CountDownLatch.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...