Концепция использования ThreadGroup по соображениям безопасности была отменена, поскольку не существует управляемой взаимосвязи между потоком (группой) и фактическим кодом, который он выполняет. Даже самый привилегированный поток может запускать небезопасный код и тем самым повышать этот код до нежелательного уровня. Поэтому сам исполняемый код (и его источник) используется для определения того, какое разрешение у него есть. Таким образом, исполняемый поток и его группа никак не играют никакой роли в обеспечении безопасности.
Так что после этого ThreadGroup
не предлагает реальной функциональности. Это просто устарело, оно сохранилось только по историческим причинам. Единственная функциональность, которая не работала без, была uncaughtException(Thread t, Throwable e)
. Но так как Java 5 есть Thread.setUncaughtExceptionHandler(UncaughtExceptionHandler)
, то теперь даже это работает без групп нитей.
Да, многие методы ThreadGroup
s не являются потокобезопасными, и не было попытки их исправить, просто потому, что они в любом случае устарели.
Джошуа Блох пишет в «Эффективное Java»:
группы темы лучше всего рассматривать как неудачный эксперимент, и вы должны просто игнорировать их существование.
Возможно, это связано с тем, что некоторые (устаревшие) методы не являются потокобезопасными, например 'stop' и' suspend'. Хотя это было бы странным аргументом, если не существует правила, в котором говорится об избежании использования Thread (который также имеет небезопасные методы «stop» и 'suspend'). – subsub