ThreadGroup — группы потоков - 1

— Привет, Амиго!

Начнем разбираться с нитями основательней.

Чтобы любая нить не могла останавливать и прерывать все нити подряд, было введено понятие «группы нитей». Нить может оказывать влияние только на другие нити, которые содержатся в той же группе, что и она. ThreadGroup – это класс, который управляет группами нитей. Такой подход позволяет защитить нити от нежелательного изменения.

Иногда приходится выполнять код, которому нельзя 100% доверять. Поэтому удобно поместить все его нити в отдельную группу и запретить им вмешиваться в работу основной группы нитей.

Группа нитей может содержать другие группы. Это позволяет организовать все нити и группы в иерархическое дерево. В таком дереве каждая группа нитей, за исключением начальной, имеет свою группу-родителя.

У класса ThreadGroup есть методы, которые позволяют получить список всех его нитей, а также влиять/изменять их. Когда мы создаем новую нить, и явно не указываем группу, она присоединяется к той же группе, что и нить-создатель.

Вот тебе несколько методов класса ThreadGroup:

Метод Описание
String getName()
Возвращает имя группы
ThreadGroup getParent()
Возвращает группу-родителя
void interrupt()
Прерывает все нити в группе.
boolean isDaemon()
Проверяет, является ли группа демоном
void setDaemon(boolean daemon)
Устанавливает группе свойство daemon
int activeCount()
Возвращает количество живых нитей в группе и ее подгруппах
int activeGroupCount()
Возвращает количество живых групп в группе и ее подгруппах
int enumerate(Thread[] list)
Помещает в массив все живые нити и возвращает их количество.
int getMaxPriority()
Возвращает максимальный приоритет для нитей в группе.
void setMaxPriority(int priority)
Позволяет задать максимальный приоритет нитей в группе и подгруппах.