Spec-Zone.ru › OpenJDK 27

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

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, является ли какой-либо другой объект «равным» этому объекту.
protected void finalize()
Устарел и будет удалён: этот элемент API подлежит удалению в будущей версии.
Финализация устарела и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс среды выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени.

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

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 этого потока, и трассировкой стека, полученной с помощью метода printStackTrace класса Throwable.

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

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

toString

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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, где приведены более подробные описания для разработчиков, концептуальные обзоры, определения терминов, способы обхода проблем и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, 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.

Spec-Zone.ru

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