Spec-Zone.ru › OpenJDK 25

Класс ThreadGroup

java.lang.Object
java.lang.ThreadGroup
Все реализуемые интерфейсы:
Thread.UncaughtExceptionHandler
public class ThreadGroup extends Object implements Thread.UncaughtExceptionHandler
Группа потоков представляет собой набор потоков. Кроме того, группа потоков может содержать другие группы потоков. Группы потоков образуют дерево, в котором у каждой группы потоков, кроме начальной, есть родительская группа.

Группа потоков имеет имя и максимальный приоритет. Имя задается при создании группы и не может быть изменено. Максимальный приоритет группы является максимальным приоритетом для потоков, созданных в этой группе. Изначально он наследуется от родительской группы потоков, но может быть изменен с помощью метода setMaxPriority.

Группа потоков слабо достижима из родительской группы, поэтому может быть удалена сборщиком мусора, если в группе нет работающих потоков и сама группа потоков в остальном недостижима.

Если не указано иное, передача аргумента null конструктору или методу этого класса приводит к выбрасыванию NullPointerException.

Группы потоков и виртуальные потоки

Среда выполнения Java создает специальную группу потоков для виртуальных потоков. Эта группа возвращается методом Thread.getThreadGroup при вызове для виртуального потока. Эта группа потоков отличается от других тем, что ее максимальный приоритет фиксирован и не может быть изменен методом setMaxPriority. Виртуальные потоки не учитываются при вычислении количества потоков, возвращаемого методом activeCount, не перечисляются методом enumerate и не прерываются методом interrupt.
Примечание к API:
В ранних выпусках Java группы потоков предоставляли способ объединять потоки и обеспечивали для них некоторую форму управления заданиями. Группы потоков поддерживали изоляцию апплетов и предоставляли методы, предназначенные для диагностики. Новым приложениям редко требуется создавать объекты ThreadGroup и взаимодействовать с этим API.
С момента появления:
1.0

Краткое описание конструкторов

Конструктор Описание
ThreadGroup(String name)
Создает новую группу потоков.
ThreadGroup(ThreadGroup parent, String name)
Создает новую группу потоков.

Краткое описание методов

Модификатор и тип Метод Описание
int activeCount()
Возвращает оценку количества работающих платформенных потоков в этой группе потоков и ее подгруппах.
int activeGroupCount()
Возвращает оценку количества групп в этой группе потоков и ее подгруппах.
final void checkAccess()
Устарел, планируется удаление: этот элемент API может быть удален в будущей версии.
Изначально этот метод определял, имеет ли выполняющийся в данный момент поток разрешение на изменение этой группы потоков.
final void destroy()
Устарел, планируется удаление: этот элемент API может быть удален в будущей версии.
Изначально этот метод предназначался для уничтожения пустой группы потоков.
int enumerate(Thread[] list)
Копирует в указанный массив все работающие платформенные потоки из этой группы потоков и ее подгрупп.
int enumerate(Thread[] list, boolean recurse)
Копирует в указанный массив все работающие платформенные потоки из этой группы потоков.
int enumerate(ThreadGroup[] list)
Копирует в указанный массив ссылки на все подгруппы этой группы потоков и ее подгрупп.
int enumerate(ThreadGroup[] list, boolean recurse)
Копирует в указанный массив ссылки на все подгруппы этой группы потоков.
final int getMaxPriority()
Возвращает максимальный приоритет этой группы потоков.
final String getName()
Возвращает имя этой группы потоков.
final ThreadGroup getParent()
Возвращает родительскую группу этой группы потоков.
final void interrupt()
Прерывает все работающие платформенные потоки в этой группе потоков и ее подгруппах.
final boolean isDaemon()
Устарел, планируется удаление: этот элемент API может быть удален в будущей версии.
Изначально этот метод сообщал, является ли группа потоков группой потоков-демонов, которая автоматически уничтожается после завершения последнего потока.
boolean isDestroyed()
Устарел, планируется удаление: этот элемент API может быть удален в будущей версии.
Изначально этот метод сообщал, была ли группа потоков уничтожена.
void list()
Выводит сведения об этой группе потоков в стандартный поток вывода.
final boolean parentOf(ThreadGroup g)
Проверяет, является ли эта группа потоков аргументом-группой или одной из ее предковых групп.
final void setDaemon(boolean daemon)
Устарел, планируется удаление: этот элемент API может быть удален в будущей версии.
Изначально этот метод задавал, является ли группа потоков группой потоков-демонов, которая автоматически уничтожается после завершения последнего потока.
final void setMaxPriority(int pri)
Задает максимальный приоритет группы.
String toString()
Возвращает строковое представление этой группы потоков.
void uncaughtException(Thread t, Throwable e)
Вызывается виртуальной машиной Java, когда поток в этой группе потоков завершается из-за неперехваченного исключения и для потока не установлен специальный Thread.UncaughtExceptionHandler.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Подробное описание конструкторов

ThreadGroup

public ThreadGroup(String name)
Создает новую группу потоков. Родительской для этой новой группы является группа потоков выполняющегося в данный момент потока.
Параметры:
name — имя новой группы потоков, может быть null

ThreadGroup

public ThreadGroup(ThreadGroup parent, String name)
Создает новую группу потоков. Родительской для этой новой группы является указанная группа потоков.
Параметры:
parent — родительская группа потоков.
name — имя новой группы потоков, может быть null

Подробное описание методов

getName

public final String getName()
Возвращает имя этой группы потоков.
Возвращает:
имя этой группы потоков; может быть null

getParent

public final ThreadGroup getParent()
Возвращает родительскую группу этой группы потоков.
Возвращает:
родительскую группу этой группы потоков. Группа потоков верхнего уровня — единственная группа потоков, родителем которой является null.

getMaxPriority

public final int getMaxPriority()
Возвращает максимальный приоритет этой группы потоков. Это максимальный приоритет для новых потоков, создаваемых в группе потоков.
Возвращает:
максимальный приоритет для новых потоков, создаваемых в группе потоков
См. также:
  • setMaxPriority(int)

isDaemon

@Deprecated(since="16", forRemoval=true) public final boolean isDaemon()
Устарел, планируется удаление: этот элемент API может быть удален в будущей версии.
Изначально этот метод сообщал, является ли группа потоков группой потоков-демонов, которая автоматически уничтожается после завершения последнего потока. Понятие группы потоков-демонов больше не существует. Группа потоков может быть удалена сборщиком мусора, если в группе нет работающих потоков и сама группа в остальном недостижима.
Возвращает статус демона этой группы потоков. Этот статус нигде не используется.
Возвращает:
статус демона этой группы потоков

isDestroyed

@Deprecated(since="16", forRemoval=true) public boolean isDestroyed()
Устарел, планируется удаление: этот элемент API может быть удален в будущей версии.
Изначально этот метод сообщал, была ли группа потоков уничтожена. Возможность уничтожить группу потоков и понятие уничтоженной группы потоков больше не существуют. Группа потоков может быть удалена сборщиком мусора, если в группе нет работающих потоков и сама группа в остальном недостижима.
Возвращает false.
Возвращает:
false
С момента появления:
1.1

setDaemon

@Deprecated(since="16", forRemoval=true) public final void setDaemon(boolean daemon)
Устарел, планируется удаление: этот элемент API может быть удален в будущей версии.
Изначально этот метод задавал, является ли группа потоков группой потоков-демонов, которая автоматически уничтожается после завершения последнего потока. Понятие группы потоков-демонов больше не существует. Группа потоков может быть удалена сборщиком мусора, если в группе нет работающих потоков и сама группа в остальном недостижима.
Задает статус демона этой группы потоков. Этот статус нигде не используется.
Параметры:
daemon — статус демона

setMaxPriority

public final void setMaxPriority(int pri)
Задает максимальный приоритет группы. Максимальный приоритет ThreadGroup для виртуальных потоков этим методом не изменяется (новый приоритет игнорируется). Этот метод не влияет на потоки в группе потоков (или ее подгруппах), у которых уже установлен более высокий приоритет.

Если аргумент pri меньше Thread.MIN_PRIORITY или больше Thread.MAX_PRIORITY, максимальный приоритет группы остается неизменным.

В противном случае приоритет этого объекта ThreadGroup устанавливается равным меньшему из указанного значения pri и максимального допустимого приоритета родительской группы этой группы потоков. (Если эта группа потоков является системной группой потоков, у которой нет родителя, ее максимальный приоритет просто устанавливается равным pri.) Затем этот метод рекурсивно вызывается для каждой группы потоков, принадлежащей этой группе, с аргументом pri.

Параметры:
pri — новый приоритет группы потоков.
См. также:
  • getMaxPriority()

parentOf

public final boolean parentOf(ThreadGroup g)
Проверяет, является ли эта группа потоков аргументом-группой или одной из ее предковых групп.
Параметры:
g — группа потоков; может быть null
Возвращает:
true, если эта группа потоков является аргументом-группой или одной из ее предковых групп; в противном случае — false.

checkAccess

@Deprecated(since="17", forRemoval=true) public final void checkAccess()
Устарел, планируется удаление: этот элемент API может быть удален в будущей версии.
Изначально этот метод определял, имел ли выполняющийся в данный момент поток разрешение на изменение этой группы потоков. Этот метод был полезен только в сочетании с менеджером безопасности, поддержка которого прекращена. Замены менеджеру безопасности или этому методу нет.
Ничего не делает.

activeCount

public int activeCount()
Возвращает оценку количества работающих платформенных потоков в этой группе потоков и ее подгруппах. Виртуальные потоки не учитываются при вычислении. Этот метод рекурсивно перебирает все подгруппы этой группы потоков.

Возвращаемое значение является лишь оценкой, поскольку количество потоков может динамически изменяться во время обхода внутренних структур данных этим методом, а также на результат может повлиять наличие определенных системных потоков. Этот метод предназначен главным образом для отладки и мониторинга.

Возвращает:
оценку количества работающих потоков в этой группе потоков и любой другой группе потоков, для которой эта группа потоков является предком

enumerate

public int enumerate(Thread[] list)
Копирует в указанный массив все работающие платформенные потоки из этой группы потоков и ее подгрупп. Этот метод не перечисляет виртуальные потоки.

Вызов этого метода действует точно так же, как вызов

enumerate(list, true)
Параметры:
list — массив, в который помещается список потоков
Возвращает:
количество потоков, помещенных в массив

enumerate

public int enumerate(Thread[] list, boolean recurse)
Копирует в указанный массив все работающие платформенные потоки из этой группы потоков. Этот метод не перечисляет виртуальные потоки. Если recurse имеет значение true, этот метод рекурсивно перечисляет все подгруппы этой группы потоков и включает ссылки на все работающие платформенные потоки в этих подгруппах. Если массив слишком мал для размещения всех потоков, дополнительные потоки молча игнорируются.

Приложение может использовать метод activeCount, чтобы оценить необходимый размер массива, однако если массив слишком мал для размещения всех потоков, дополнительные потоки молча игнорируются. Если необходимо получить каждый работающий поток в этой группе потоков, вызывающая сторона должна проверить, что возвращенное значение int строго меньше длины list.

Из-за присущего этому методу состояния гонки рекомендуется использовать его только для отладки и мониторинга.

Параметры:
list — массив, в который помещается список потоков
recurse — если true, рекурсивно перечисляет все подгруппы этой группы потоков
Возвращает:
количество потоков, помещенных в массив

activeGroupCount

public int activeGroupCount()
Возвращает оценку количества групп в этой группе потоков и ее подгруппах. Рекурсивно перебирает все подгруппы этой группы потоков.

Возвращаемое значение является лишь оценкой, поскольку количество групп потоков может динамически изменяться во время обхода внутренних структур данных этим методом. Этот метод предназначен главным образом для отладки и мониторинга.

Возвращает:
количество групп потоков, для которых эта группа потоков является предком

enumerate

public int enumerate(ThreadGroup[] list)
Копирует в указанный массив ссылки на все подгруппы этой группы потоков и ее подгрупп.

Вызов этого метода действует точно так же, как вызов

enumerate(list, true)
Параметры:
list — массив, в который помещается список групп потоков
Возвращает:
количество групп потоков, помещенных в массив

enumerate

public int enumerate(ThreadGroup[] list, boolean recurse)
Копирует в указанный массив ссылки на все подгруппы этой группы потоков. Если recurse имеет значение true, этот метод рекурсивно перечисляет все подгруппы этой группы потоков и включает ссылки на все группы потоков в этих подгруппах.

Приложение может использовать метод activeGroupCount, чтобы оценить необходимый размер массива, однако если массив слишком мал для размещения всех групп потоков, дополнительные группы потоков молча игнорируются. Если необходимо получить все подгруппы этой группы потоков, вызывающая сторона должна проверить, что возвращенное значение int строго меньше длины list.

Из-за присущего этому методу состояния гонки рекомендуется использовать его только для отладки и мониторинга.

Параметры:
list — массив, в который помещается список групп потоков
recurse — если true, рекурсивно перечисляет все подгруппы
Возвращает:
количество групп потоков, помещенных в массив

interrupt

public final void interrupt()
Прерывает все работающие платформенные потоки в этой группе потоков и ее подгруппах.
С момента появления:
1.2
См. также:
  • Thread.interrupt()

destroy

@Deprecated(since="16", forRemoval=true) public final void destroy()
Устарел, планируется удаление: этот элемент API может быть удален в будущей версии.
Изначально этот метод предназначался для уничтожения пустой группы потоков. Возможность явного уничтожения группы потоков больше не существует. Группа потоков может быть удалена сборщиком мусора, если в группе нет работающих потоков и сама группа в остальном недостижима.
Ничего не делает.

list

public void list()
Выводит сведения об этой группе потоков в стандартный поток вывода. Этот метод полезен только для отладки.

uncaughtException

public void uncaughtException(Thread t, Throwable e)
Вызывается виртуальной машиной Java, когда поток в этой группе потоков завершается из-за неперехваченного исключения и для потока не установлен специальный Thread.UncaughtExceptionHandler.

Метод uncaughtException класса ThreadGroup выполняет следующие действия:

  • Если у этой группы потоков есть родительская группа, вызывается метод uncaughtException этой родительской группы с теми же двумя аргументами.
  • В противном случае этот метод проверяет, установлен ли обработчик неперехваченных исключений по умолчанию; если установлен, его метод uncaughtException вызывается с теми же двумя аргументами.
  • В противном случае в стандартный поток ошибок выводится сообщение с именем потока, возвращаемым методом getName этого потока, и трассировкой стека, сформированной методом Throwable printStackTrace.

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

Определен в:
uncaughtException в интерфейсе Thread.UncaughtExceptionHandler
Параметры:
t — поток, который собирается завершиться.
e — неперехваченное исключение.

toString

public String toString()
Возвращает строковое представление этой группы потоков.
Переопределяет:
toString в классе Object
Возвращает:
строковое представление этой группы потоков.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее дочерних компаний в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/ThreadGroup.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API