ThreadGroup

Открыта
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)
Позволяет задать максимальный приоритет нитей в группе и подгруппах.
Комментарии (13)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Олег
Уровень 61
Expert
18 июля, 17:40
Это точно отсюда? Я вообще ничего не понял.
Павел
Уровень 106
Expert
26 октября 2023, 08:33
"Начнем разбираться с нитями основательней..." Может сперва нужно разобраться основательней и чего-нибудь существенное в лекции напечатать перед тем как такие задачки давать? Или мы сами должны "основательно разобраться"?
jvatechs Backend Developer в Ищу стажировку Expert
23 марта 2023, 03:11
Касательно первой задачки: 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, 13:47
Сайт про паттерны и фабрику в частности. Юзать впн. https://refactoring.guru/ru/design-patterns/factory-method
Антон
Уровень 108
Expert
4 июля 2022, 19:19
Информация о том, что такое ThreadLocalRandom, будет приведена в 6-ой лекции 14-го уровня. Зачем задача на него здесь? Что такое ThreadFactory, как это решать и как это связано с темой лекции? Уровни 11 - 14 Java Core очень демотивируют заниматься дальше. Ничего не понятно ни из лекций, ни из задач, когда даже эталонное решение не ясно, как сделано
Сергей Иванов
Уровень 108
Expert
5 июля 2022, 11:38
Здесь сполер на первую задачу про фабрику. Если еще не решали, пропустите. Надеюсь поможет разобраться. Задача требует использовать два объекта AtomicInteger с методом incrementAndGet() в классе AmigoThreadFactory. При обращении к методу внутри увеличивается значение на 1. Один объект считает количество входов в метод, отображая номер нити в группе. Второй статический объект может считать количество созданных классов AmigoThreadFactory и тем самым отображает количество фабрик.
Константин QA Engineer в TGI - IT Expert
12 июля 2022, 09:16
Полностью с тобой согласен!
Марат Гарипов
Уровень 108
Expert
24 июля 2022, 12:33
первая задача решается на основе общего понимания паттерна фабрика. в конце концов не так важно, какие именно объекты она должна производить. а спецификация нашей фабрики подробно описана в условии задачи (читать нужно внимательно, сам постоянно попадаюсь именно на том, что упускаю какой-то, казалось бы, незначительный момент). на вопрос почему вторая задача оказалась здесь, не могу ответить, быть может какая-то ошибка при модернизации курса (к примеру, в предыдущей версии курса к этому моменту тему threadlocalrandom уже затрагивали). но исходя из информации, полученной из слов Антона и выдачи поисковика, мы действительно скоро будем проходить эту тему. а пока, гугл в помощь, а если не терпится решить задачу и, так сказать, закрыть гештальт:) без глубокого погружения в вопрос, поможет вот эта статья
Руслан Шмаков
Уровень 108
Expert
26 июня 2022, 14:34
Что то не пойму, что я пропустил? в лекции рассматривается одна тема, в задачах другая. В лекции приведены одни методы, в задачах совсем другие. Для чего тогда привели эти методы в лекции, если я даже ими не воспользовался?
Джама
Уровень 108
Expert
20 июня 2022, 10:17
Мне одной последние лекции тяжко даются? Ни примеров тебе нормальных, ни объясненя дельного?
Антон
Уровень 108
Expert
20 июня 2022, 20:47
Джама, ты не одна такая)
Джама
Уровень 108
Expert
21 июня 2022, 10:38
Вот даже не знаю, радоваться или плакать)
Константин QA Engineer в TGI - IT Expert
12 июля 2022, 09:15
Дааа, самооценка после последних лекций упала ниже плинтуса)