Как вы можете проверить, является ли поток единственным оставшимся потоком в Java? - PullRequest
4 голосов
/ 29 августа 2009

Я хочу, чтобы поток в Java-программе зацикливался до тех пор, пока все остальные потоки не умрут, а затем завершил цикл. Как я могу узнать, когда моя нить цикла является единственной оставшейся нитью?

В моей ситуации поток цикла не будет ссылаться ни на какие другие потоки, поэтому я не думаю, что isAlive() поможет мне.

Ответы [ 5 ]

11 голосов
/ 29 августа 2009

Это может или не может помочь, в зависимости от вашего варианта использования.

Установите ваш цикл в режим демона

setDaemon(true); 

и Java убьет его для вас, если пропадут все потоки, не являющиеся демонами.

3 голосов
/ 29 августа 2009

Разве это не было бы ситуацией, когда вы рассматривали бы Шаблон пула потоков ?

Если нет, то не лучше ли вести список активных потоков, удаляя каждый из них по мере их уничтожения?

1 голос
/ 29 августа 2009

ThreadGroup имеет необходимые вам методы. Будет проще, если вы сможете создать все потоки в одной и той же группе нитей, но в этом нет особой необходимости. Thread.currentThread (). GetThreadGroup () поможет вам начать работу. Методы перечисления в ThreadGroup - это то, как вы можете получить список всех потоков.

0 голосов
/ 13 декабря 2012

Вы можете взломать что-нибудь вместе с помощью ThreadFactory и просто зарегистрировать все потоки в WeakHashMap.

Выполните итерацию по карте, чтобы увидеть, какие потоки живы.

Другой возможный подход - использовать ThreadJMXBean?

0 голосов
/ 29 августа 2009

Используете ли вы Executors и invokeAll? То есть Вы можете реализовать свою функциональность как Callables?

Тогда это тривиально просто.

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