ThreadGroup

Модуль 2. Java Core
13 уровень , 0 лекция
Открыта
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)
Позволяет задать максимальный приоритет нитей в группе и подгруппах.
Комментарии (16)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Артем Уровень 48
16 марта 2025
Увы, но я не Эйнштейн...
Павел Уровень 19 Expert
21 ноября 2024
Учтите, ориентироваться надо по картинке вначале лекции. Задачи в конце "относятся" не к ней. (Или. Лекция для негров. Задачи для Эйнштейна.)
Олег Уровень 106 Expert
18 июля 2024
Это точно отсюда? Я вообще ничего не понял.
Павел Уровень 19 Expert
26 октября 2023
"Начнем разбираться с нитями основательней..." Может сперва нужно разобраться основательней и чего-нибудь существенное в лекции напечатать перед тем как такие задачки давать? Или мы сами должны "основательно разобраться"?
Максим Уровень 115
6 марта 2025
Похоже что да)
jvatechs Уровень 111 Expert
23 марта 2023
Касательно первой задачки: Pool номер вычисляете вне метода в самом классе. Вам понадобится static int counter и преинкрементом этого counter, заданного в качестве параметра в AtomicInteger объекте.

private static int counter;
AtomicInteger atomicPool = new AtomicInteger(++counter);
Далее, создаете переменную int poolNumber и делаете инкремент методом AtomicInteger. (это все ВНЕ МЕТОДА newThread) Thread номер на изи вычисляется внутри метода, созданием объекта AtomicInteger и инкрементом этого объекта в самом выводе (System.out.println). (все внутри метода) Просто тут в этой лекции нет даже и намека на AtomicInteger, автор немног не поленился бы да написал немного о нем.
Екатерина Уровень 70 Expert
10 сентября 2022
Сайт про паттерны и фабрику в частности. Юзать впн. https://refactoring.guru/ru/design-patterns/factory-method
Антон Уровень 108 Expert
4 июля 2022
Информация о том, что такое ThreadLocalRandom, будет приведена в 6-ой лекции 14-го уровня. Зачем задача на него здесь? Что такое ThreadFactory, как это решать и как это связано с темой лекции? Уровни 11 - 14 Java Core очень демотивируют заниматься дальше. Ничего не понятно ни из лекций, ни из задач, когда даже эталонное решение не ясно, как сделано
Сергей Иванов Уровень 108 Expert
5 июля 2022
Здесь сполер на первую задачу про фабрику. Если еще не решали, пропустите. Надеюсь поможет разобраться. Задача требует использовать два объекта AtomicInteger с методом incrementAndGet() в классе AmigoThreadFactory. При обращении к методу внутри увеличивается значение на 1. Один объект считает количество входов в метод, отображая номер нити в группе. Второй статический объект может считать количество созданных классов AmigoThreadFactory и тем самым отображает количество фабрик.
Константин Уровень 100 Expert
12 июля 2022
Полностью с тобой согласен!
Марат Гарипов Уровень 108 Expert
24 июля 2022
первая задача решается на основе общего понимания паттерна фабрика. в конце концов не так важно, какие именно объекты она должна производить. а спецификация нашей фабрики подробно описана в условии задачи (читать нужно внимательно, сам постоянно попадаюсь именно на том, что упускаю какой-то, казалось бы, незначительный момент). на вопрос почему вторая задача оказалась здесь, не могу ответить, быть может какая-то ошибка при модернизации курса (к примеру, в предыдущей версии курса к этому моменту тему threadlocalrandom уже затрагивали). но исходя из информации, полученной из слов Антона и выдачи поисковика, мы действительно скоро будем проходить эту тему. а пока, гугл в помощь, а если не терпится решить задачу и, так сказать, закрыть гештальт:) без глубокого погружения в вопрос, поможет вот эта статья
Руслан Шмаков Уровень 108 Expert
26 июня 2022
Что то не пойму, что я пропустил? в лекции рассматривается одна тема, в задачах другая. В лекции приведены одни методы, в задачах совсем другие. Для чего тогда привели эти методы в лекции, если я даже ими не воспользовался?
Джама Уровень 108 Expert
20 июня 2022
Мне одной последние лекции тяжко даются? Ни примеров тебе нормальных, ни объясненя дельного?
Антон Уровень 108 Expert
20 июня 2022
Джама, ты не одна такая)
Джама Уровень 108 Expert
21 июня 2022
Вот даже не знаю, радоваться или плакать)
Константин Уровень 100 Expert
12 июля 2022
Дааа, самооценка после последних лекций упала ниже плинтуса)