Класс 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 |
Создаёт новую группу потоков. |
ThreadGroup |
Создаёт новую группу потоков. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
int |
activeCount() |
Возвращает приблизительное количество активных платформенных потоков в этой группе потоков и её подгруппах. |
int |
activeGroupCount() |
Возвращает приблизительное количество групп в этой группе потоков и её подгруппах. |
final void |
checkAccess() |
Устаревший, для удаления: Этот элемент API может быть удалён в будущей версии. Этот метод изначально определял, имеет ли текущий запущенный поток разрешение на изменение этой группы потоков. |
final void |
destroy() |
Устаревший, для удаления: Этот элемент API может быть удалён в будущей версии. Этот метод первоначально был предназначен для уничтожения пустой группы потоков. |
int |
enumerate |
Копирует в указанный массив все активные платформенные потоки в этой группе потоков и её подгруппах. |
int |
enumerate |
Копирует в указанный массив все активные платформенные потоки в этой группе потоков. |
int |
enumerate |
Копирует в указанный массив ссылки на все подгруппы в этой группе потоков и её подгруппах. |
int |
enumerate |
Копирует в указанный массив ссылки на все подгруппы в этой группе потоков. |
final int |
getMaxPriority() |
Возвращает максимальный приоритет этой группы потоков. |
final String |
getName() |
Возвращает имя этой группы потоков. |
final ThreadGroup |
getParent() |
Возвращает родительскую группу потоков. |
final void |
interrupt() |
Прерывает все активные платформенные потоки в этой группе потоков и её подгруппах. |
final boolean |
isDaemon() |
Устаревший, для удаления: Этот элемент API может быть удалён в будущей версии. Этот метод первоначально указывал, является ли группа потоков группой демонов, которая автоматически уничтожается при завершении последнего потока. |
boolean |
isDestroyed() |
Устаревший, для удаления: Этот элемент API может быть удалён в будущей версии. Этот метод первоначально указывал, уничтожается ли группа потоков. |
void |
list() |
Выводит информацию об этой группе потоков в стандартный вывод. |
final boolean |
parentOf |
Проверяет, является ли эта группа потоков аргументом группы потоков или одной из её предковой групп потоков. |
final void |
setDaemon |
Устаревший, для удаления: Этот элемент API может быть удалён в будущей версии. Этот метод первоначально настраивал, является ли группа потоков группой демонов, которая автоматически уничтожается при завершении последнего потока. |
final void |
setMaxPriority |
Устанавливает максимальный приоритет группы. |
String |
toString() |
Возвращает строковое представление этой группы потоков. |
void |
uncaughtException |
Вызывается виртуальной машиной Java, когда поток в этой группе потоков останавливается из-за неуловимого исключения, и у потока нет установленного обработчика Thread.UncaughtExceptionHandler. |
Подробное описание конструкторов
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()
- Возвращает:
- максимальный приоритет для новых потоков, созданных в группе потоков
- См. также:
isDaemon
@Deprecated(since="16", forRemoval=true) public final boolean isDaemon()
- Возвращает:
- статус демон-потока этой группы потоков
isDestroyed
@Deprecated(since="16", forRemoval=true) public boolean isDestroyed()
- Возвращает:
- false
- С:
- 1.1
setDaemon
@Deprecated(since="16", forRemoval=true) public final void setDaemon(boolean daemon)
- Параметры:
-
daemon- статус демон-потока
setMaxPriority
public final void setMaxPriority(int pri)
Если значение pri меньше Thread.MIN_PRIORITY или больше Thread.MAX_PRIORITY, максимальный приоритет группы остаётся неизменным.
В противном случае приоритет этого объекта ThreadGroup устанавливается как меньшее из заданного значения pri и максимального допустимого приоритета родителя этой группы потоков. (Если эта группа потоков является системной группой потоков, у которой нет родителя, то её максимальный приоритет просто устанавливается на pri.) Затем этот метод вызывается рекурсивно с pri в качестве аргумента для каждой группы потоков, которая принадлежит этой группе потоков.
- Параметры:
-
pri- новый приоритет группы потоков. - См. также:
parentOf
public final boolean parentOf(ThreadGroup g)
- Параметры:
-
g- группа потоков, может бытьnull - Возвращает:
-
trueесли эта группа потоков является аргументом группы потоков или одной из её родительских групп потоков;falseв противном случае.
checkAccess
@Deprecated(since="17", forRemoval=true) public final void checkAccess()
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()
Возвращаемое значение является лишь оценкой, поскольку количество групп потоков может динамически меняться во время прохода по внутренним структурам данных. Этот метод предназначен в первую очередь для отладки и мониторинга.
- Возвращает:
- количество групп потоков с этой группой потоков как предком
перечислить
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
- См. также:
уничтожить
@Deprecated(since="16", forRemoval=true) public final void destroy()
список
public void list()
uncaughtException
public void uncaughtException(Thread t, Throwable e)
Thread.UncaughtExceptionHandler. Метод uncaughtException класса ThreadGroup выполняет следующие действия:
- Если у этой группы потоков есть родительская группа потоков, вызывается метод
uncaughtExceptionэтой родительской группы с теми же двумя аргументами. - В противном случае этот метод проверяет, установлен ли стандартный обработчик неперехваченных исключений, и если да, то вызывается его метод
uncaughtExceptionс теми же двумя аргументами. - В противном случае выводится сообщение, содержащее имя потока, возвращаемое методом потока
getName, и стек-трейс, используя методThrowable'sprintStackTrace, в поток стандартных сообщений об ошибках.
Приложения могут переопределить этот метод в подклассах ThreadGroup, чтобы обеспечить альтернативное обращение с неперехваченными исключениями.
- Определено в:
-
uncaughtExceptionв интерфейсеThread.UncaughtExceptionHandler - Параметры:
-
t- поток, который собирается завершиться. -
e- неперехваченное исключение.
toString
© 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