JavaRush /Курсы /Java Multithreading /ThreadGroup — группы потоков

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

Java Multithreading
8 уровень , 3 лекция
Открыта
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)
Позволяет задать максимальный приоритет нитей в группе и подгруппах.
Комментарии (45)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
8 августа 2025
Всегда ругал тех, кто нелестно отзывается о курсе, мол ничего не понятно, мало информации. Думал, что блииин, в этом же вся и суть искать информацию самостоятельно. В этом весь кайф и задумка автора. Но.. Когда ты решаешь задачу про архиватор, для которой пришлось перелопатить кучу сайтов и задрочить вопросами чат GPT, а потом тебе суют лекции про.. Про ENUM, не рассказывая о его последних изменениях блин и про ThreadGroup, который уже считается устаревшим, начинаешь задумываться. А как хорошо было бы, если бы я изучал теорию о работе с файлами и папками, об устройстве zip файлов, о том, как их правильно читать и записывать, а потом бы мне дали эту крутую задачу, во время решения которой я постоянно бы возвращался к лекциям. Сейчас всё прохождение курса свелось к однодневному изучению материала уровня и двух-трехдневному серфингу интернета для решения задачи от боброва, к которой ты всегда оказываешься не готов. Надеюсь в следующем разделе всё будет по-другому. В конце концов, всегда себя утешаю, это курс благодаря которому я хоть что-то понимаю в программировании и который меня многому научил, мне обошёлся в каких-то 6-7 тысяч рублей. А те курсы о которых все говорят и от которых "так отстаёт JavaRush" стоят все 100-200к. Так что грудь вперед, утереть сопли и двигаться дальше. Задачи тут на высоком уровне и никто за тебя их в реальной жизни не решит. Всё будет именно так же как и на JavaRush. Ты никогда не будешь готов к крупной задаче от Боброва и придётся выкручиваться, просить помощи, искать в интернете. JavaRush учит жизни. И я скажу то, что для тебя не новость: мир не такой уж солнечный и приветливый. Это очень опасное, жесткое место... Ну вы поняли. *ух и понесло меня
Anemon Уровень 13 Expert
13 января 2025
Какая щутка)0
Gans Electro Уровень 41
9 сентября 2023
Полезно будет запомнить

Thread.currentThread().getThreadGroup().getName()
Igoreek Уровень 43
18 сентября 2024
в чем польза?
1 октября 2024
в молоке
very junior java developer Уровень 51
6 июня 2023
В современном программировании на Java, использование ThreadGroup не является обязательным или рекомендованным. Обычно более гибкий и предпочтительный подход заключается в использовании класса ExecutorService и ThreadPoolExecutor из пакета java.util.concurrent, которые предоставляют более современные и эффективные средства для управления пулом потоков. Но отмечу, что всё вышесказанное не говорит о том, что - быть знакомым и уметь работать с классом ThreadGroup это зашквар....
Rolik Уровень 41
24 апреля 2023
Группы потоков лучше всего рассматривать как неудачный эксперимент. Просто не обращайте внимания на их существование. Эккель "Философия Java".
Anemon Уровень 13 Expert
13 января 2025
А почему так?
Андрей Уровень 42
14 апреля 2023
феерично, дальше!
FutureDev Уровень 42
9 марта 2023
Java Multithreading 8 уровень, 3 лекция Начнем разбираться с нитями основательней. Ну... давайте начнем)))
TemaCode Уровень 51
11 декабря 2022
Вот Вам человеческий пример, а то в материалах пусто-) текущий ThreadGroup и Parent :

        Thread currentThread = Thread.currentThread();
	ThreadGroup threadGroup = currentThread.getThreadGroup();
	System.out.println("Thread: " + currentThread.getName());
	System.out.println("Thread Group: " + threadGroup.getName());
	System.out.println("Parent Group: " + threadGroup.getParent().getName());
Buenos Уровень 49
29 июля 2022
Кусочек текста вроде небольшой, вроде и тема не нова. Прочитал несколько раз - ничего не понял!
Mike-L Уровень 43
16 июня 2021
О! Так это Байден скоро так будет #прям картинка в тему