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

Давай розбиратися з потоками ґрунтовніше.

Щоб будь-який потік не міг зупиняти та переривати всі потоки поспіль, запровадили поняття «групи потоків». Потік може впливати лише на потоки, які знаходяться у тій самій групі, що й він. 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)
Дозволяє задати максимальний пріоритет потоків у групі та підгрупах