Spec-Zone.ru › OpenJDK 24

Класс 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 группировать потоки и обеспечивать управление задачами для потоков. Группы потоков поддерживали изоляцию апплетов и определяли методы, предназначенные для диагностических целей. Для новых приложений редко требуется создавать ThreadGroups и взаимодействовать с этим 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.

Методы, объявленные в классе java.lang.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)
Устанавливает максимальный приоритет группы. Максимальный приоритет группы потоков для виртуальных потоков этим методом не изменяется (новый приоритет игнорируется). Потоки в группе потоков (или подгруппах), которые уже имеют более высокий приоритет, не затронуты этим методом.

Если значение 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()
Возвращает оценку количества групп в этой группе потоков и её подгруппах. Рекурсивно перебирает все подгруппы в этой группе потоков.

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

Возвращает:
количество групп потоков с этой группой потоков как предком
END_OF_DOCUMENT_MARKER

перечислить

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

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

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

перечислить

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

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

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

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

прервать

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

уничтожить

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

список

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

uncaughtException

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

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

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

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

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

toString

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

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/ThreadGroup.html

Spec-Zone.ru

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