группы темы первоначально были задуманы как механизм для выделения апплеты в целях безопасности. Они никогда не выполняли это обещание , и их важность безопасности уменьшилась настолько, что они не являются , даже упомянутыми в стандартной работе над моделью безопасности Java [Gong03].
[...] В ироническом повороте API ThreadGroup
слабый от безопасности резьбы точка зрения. Чтобы получить список активных потоков в группе потоков, вы должны вызывать метод enumerate
, который принимает в качестве параметра массив, достаточно большой для хранения всех активных потоков. Метод activeCount
возвращает число активных потоков в группе потоков, но нет гарантии, что этот счет будет по-прежнему точным, как только массив будет выделен и передан методу enumerate
. Если количество потоков увеличилось и массив слишком мал, метод enumerate
молча игнорирует любые потоки, для которых нет места в массиве.
API, который перечисляет подгруппы группы потоков, также имеет недостатки. В то время как эти проблемы могли быть исправлены с добавлением новых методов, у них нет, потому что нет реальной необходимости: группы нитей устарели.
До выпуска 1.5, был один небольшой кусок функциональности, которая была доступно только с ThreadGroup
API: метод ThreadGroup.uncaughtException
был единственным способом, чтобы получить контроль, когда поток бросил неперехваченное исключение. Эта функциональность полезна, например, для прямого трассировки стека в приложении - конкретного журнала. Однако, начиная с версии 1.5, доступна такая же функциональность с методом Thread
setUncaughtExceptionHandler
.
Подводя итог, группы потоков не обеспечивают много полезной функциональности, и большая часть функциональности, которую они предоставляют, являются некорректными. Группы тем лучше всего рассматривать как неудачный эксперимент, и вы просто должны игнорировать их существование . Если вы создаете класс, который имеет дело с логическими группами потоков, то вы, возможно, должны использовать исполнители пула потоков (пункт 68).
Argh Я ненавижу это, когда люди говорят «не используйте ThreadGroup». Это как сказать «не использовать потоки». В потоке есть ThreadGroup, этого не обойти, поэтому, если вы не хотите иметь программу без потоков, ** вы используете ThreadGroups **. Я согласен, что нам нужно задать вопрос, когда, как и почему * не использовать их. –
+1 по причинам, которые указывает Марк Петерс, и потому что этот вопрос является хорошим средством для этого. –
Почему это сообщество Wiki? –