Я знаю о существующей практике использования Исполнителей вместо ThreadGroup:
Однако, каковы свойственные дефекты ThreadGroup как такового (я услышал неопределенную критику за тот класс)?
Спасибо за ответ.
PS. это, кажется, не отвечает на этот вопрос.
Это объясняется в Effective Java 2nd Ed. , пункт 73.
Группы потоков изначально задумывались как механизм для изоляции апплетов в целях безопасности. Они так и не выполнили этого обещание, и их важность для безопасности снизилась до такой степени, что они не даже не упоминаются в стандартной работе по модели безопасности Java [Gong03].
[...] По иронии судьбы, API
ThreadGroup
является слабым с точки зрения безопасности потоков. с точки зрения безопасности потоков. Чтобы получить список активных потоков в группе потоков, вы должны вызвать методenumerate
, который принимает в качестве параметра массив, достаточно большой для хранения всех активных потоков. МетодactiveCount
возвращает количество активных потоков в группе потоков. потоков в группе потоков, но нет никакой гарантии, что этот подсчет будет все еще точным после выделения массива и передачи его методуenumerate
. Если количество потоков увеличилось, а массив слишком мал, методenumerate
молча игнорирует все потоки, для которых нет места в массиве.API, перечисляющий подгруппы группы потоков, также несовершенен. Хотя эти проблемы можно было бы устранить добавлением новых методов, они но этого не произошло, потому что в этом нет реальной необходимости: группы потоков устарели.
До выпуска 1.5 существовала одна небольшая функциональность, которая была доступна только с
ThreadGroup
API:ThreadGroup.uncaughtException
методThreadGroup.uncaughtException
был единственным способом получить контроль, когда поток выбрасывал непойманное исключение. Эта функциональность полезна, например, для направления трассировки стека в журнал приложения. конкретный журнал. Однако, начиная с версии 1.5, та же функциональность доступна с помощью методаThread
setUncaughtExceptionHandler
.Подводя итог, можно сказать, что группы потоков не предоставляют много полезной функциональности, а большая часть функциональности, которую они предоставляют, несовершенна. Группы потоков лучше всего рассматривать как неудачный эксперимент, и вы должны просто игнорировать их существование. Если вы разрабатываете класс, который имеет дело с логическими группами потоков, вам вероятно, следует использовать исполнителей пула потоков (пункт 68).