Класс ThreadGroup
- Все реализованные интерфейсы:
Thread.UncaughtExceptionHandler
public class ThreadGroup extends Object implements Thread.UncaughtExceptionHandler
Группа потоков имеет имя и максимальный приоритет. Имя задается при создании группы и изменить его нельзя. Максимальный приоритет группы — это максимальный приоритет для потоков, созданных в группе. Изначально он наследуется от родительской группы потоков, но может быть изменен с помощью метода setMaxPriority.
Группа потоков слабо доступна из родительской группы, поэтому она может быть кандидатом на сборку мусора, когда в группе нет активных потоков, и группа потоков иначе недоступна.
Если не указано иное, передача null аргумента в конструктор или метод в этом классе приведет к тому, что будет брошено исключение NullPointerException.
Группы потоков и виртуальные потоки
Java runtime создает специальную группу потоков для виртуальных потоков. Эта группа возвращается методомThread.getThreadGroup, когда он вызывается для виртуального потока. Группа потоков отличается от других групп потоков тем, что ее максимальный приоритет фиксирован и не может быть изменен методом setMaxPriority. Виртуальные потоки не включаются в оценку количества потоков, возвращаемой методом activeCount, не перечисляются методом enumerate и не прерываются методом interrupt.- Примечание API:
- Группы потоков предоставляли способ в ранних выпусках Java для группировки потоков и предоставления формы управления задачами для потоков. Группы потоков поддерживали изоляцию апплетов и определяли методы, предназначенные для диагностических целей. Для новых приложений следует редко создавать ThreadGroups и взаимодействовать с этим API.
- C момента:
- 1.0
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
ThreadGroup |
Создает новую группу потоков. |
ThreadGroup |
Создает новую группу потоков. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
int |
activeCount() |
Возвращает оценку количества активных платформенных потоков в этой группе потоков и ее подгруппах. |
int |
activeGroupCount() |
Возвращает оценку количества групп в этой группе потоков и ее подгруппах. |
final void |
checkAccess() |
Устаревший, подлежит удалению: Этот элемент API может быть удален в будущей версии. Этот метод полезен только в сочетании с Security Manager, который устарел и подлежит удалению в будущей версии. |
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 |
resume() |
Устаревший, подлежит удалению: Этот элемент API может быть удален в будущей версии. Этот метод изначально предназначался для возобновления всех потоков в группе потоков. |
final void |
setDaemon |
Устаревший, подлежит удалению: Этот элемент API может быть удален в будущей версии. Этот метод изначально настраивал, является ли группа потоков группой демон-потоков, которая автоматически уничтожается, когда завершается последний поток. |
final void |
setMaxPriority |
Устанавливает максимальный приоритет группы. |
final void |
stop() |
Устаревший, подлежит удалению: Этот элемент API может быть удален в будущей версии. Этот метод изначально предназначался для остановки всех потоков в группе потоков. |
final void |
suspend() |
Устаревший, подлежит удалению: Этот элемент API может быть удален в будущей версии. Этот метод изначально предназначался для приостановки всех потоков в группе потоков. |
String |
toString() |
Возвращает строковое представление этой группы потоков. |
void |
uncaughtException |
Вызывается Java Virtual Machine, когда поток в этой группе потоков останавливается из-за необработанного исключения, и у потока нет установленного Thread.UncaughtExceptionHandler. |
Подробное описание конструкторов
ThreadGroup
public ThreadGroup(String name)
Метод checkAccess родительской группы потоков вызывается без аргументов; это может привести к исключению безопасности.
- Параметры:
-
name- имя новой группы потоков, может бытьnull - Исключения:
-
SecurityException- если текущий поток не может создать поток в заданной группе потоков. - См. также:
ThreadGroup
public ThreadGroup(ThreadGroup parent, String name)
Метод checkAccess родительской группы потоков вызывается без аргументов; это может привести к исключению безопасности.
- Параметры:
-
parent- родительская группа потоков. -
name- имя новой группы потоков, может бытьnull - Исключения:
-
SecurityException- если текущий поток не может создать поток в заданной группе потоков. - См. также:
Подробное описание методов
getName
public final String getName()
- Возвращает:
- имя этой группы потоков, может быть
null
getParent
public final ThreadGroup getParent()
Сначала, если родитель не null, метод checkAccess родительской группы потоков вызывается без аргументов; это может привести к исключению безопасности.
- Возвращает:
- родителя этой группы потоков. Группа потоков верхнего уровня - единственная группа потоков, у которой родитель
null. - Исключения:
-
SecurityException- если текущий поток не может изменить эту группу потоков. - См. также:
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)
Сначала метод checkAccess этой группы потоков вызывается без аргументов; это может привести к исключению безопасности.
- Параметры:
-
daemon- статус демона - Исключения:
-
SecurityException- если текущий поток не может изменить эту группу потоков. - См. также:
setMaxPriority
public final void setMaxPriority(int pri)
Сначала метод checkAccess этой группы потоков вызывается без аргументов; это может привести к исключению безопасности.
Если аргумент pri меньше Thread.MIN_PRIORITY или больше Thread.MAX_PRIORITY, максимальный приоритет группы остается неизменным.
В противном случае приоритет этого объекта ThreadGroup устанавливается в меньшее из указанного pri и максимального разрешенного приоритета родителя этой группы потоков. (Если эта группа потоков является системной группой потоков, у которой нет родителя, то ее максимальный приоритет просто устанавливается в pri.) Затем этот метод вызывается рекурсивно с pri в качестве аргумента для каждой группы потоков, которая принадлежит этой группе потоков.
- Параметры:
-
pri- новый приоритет группы потоков. - Исключения:
-
SecurityException- если текущий поток не может изменить эту группу потоков. - См. также:
parentOf
public final boolean parentOf(ThreadGroup g)
- Параметры:
-
g- группа потоков, может бытьnull - Возвращает:
-
trueесли эта группа потоков является аргументом группы потоков или одной из ее предков-групп потоков;falseв противном случае.
checkAccess
@Deprecated(since="17", forRemoval=true) public final void checkAccess()
Если существует менеджер безопасности, его метод checkAccess вызывается с этой группой потоков в качестве аргумента. Это может привести к исключению SecurityException.
- Исключения:
-
SecurityException- если текущему потоку запрещен доступ к этой группе потоков. - См. также:
activeCount
public int activeCount()
Возвращаемое значение является лишь приближением, поскольку количество потоков может динамически изменяться во время прохода по внутренним структурам данных и может быть подвержено влиянию определенных системных потоков. Этот метод предназначен в первую очередь для отладки и мониторинга.
- Возвращает:
- приблизительное количество активных потоков в этой группе потоков и в любой другой группе потоков, у которой эта группа потоков является предком
enumerate
public int enumerate(Thread[] list)
Вызов этого метода ведет себя точно так же, как вызов
enumerate(list, true)
- Параметры:
-
list- массив, в который нужно поместить список потоков - Возвращает:
- количество потоков, помещенных в массив
- Исключения:
-
SecurityException- если checkAccess определяет, что текущий поток не может получить доступ к этой группе потоков
enumerate
public int enumerate(Thread[] list, boolean recurse)
recurse равно true, этот метод рекурсивно перечисляет все подгруппы этой группы потоков, и ссылки на все активные платформенные потоки в этих подгруппах также включаются. Если массив слишком короткий, чтобы вместить все потоки, дополнительные потоки игнорируются. Приложение может использовать метод activeCount для оценки, каким должен быть размер массива, однако если массив слишком короткий, чтобы вместить все потоки, дополнительные потоки игнорируются. Если крайне важно получить все активные потоки в этой группе потоков, вызывающий метод должен проверить, что возвращаемое значение int строго меньше длины list.
Из-за внутренней гонки в этом методе рекомендуется использовать его только для отладки и мониторинга.
- Parameters:
-
list- массив, в который нужно поместить список потоков -
recurse- еслиtrue, рекурсивно перечислить все подгруппы этой группы потоков - Returns:
- количество потоков, помещенных в массив
- Throws:
-
SecurityException- если checkAccess определяет, что текущий поток не имеет доступа к этой группе потоков
activeGroupCount
public int activeGroupCount()
Возвращаемое значение является лишь приблизительным, поскольку количество групп потоков может динамически изменяться во время обхода внутренних структур данных. Этот метод предназначен в первую очередь для отладки и мониторинга.
- Returns:
- количество групп потоков, у которых эта группа потоков является предком
enumerate
public int enumerate(ThreadGroup[] list)
Вызов этого метода ведет себя точно так же, как вызов
enumerate(list, true)
- Parameters:
-
list- массив, в который нужно поместить список групп потоков - Returns:
- количество групп потоков, помещенных в массив
- Throws:
-
SecurityException- если checkAccess определяет, что текущий поток не имеет доступа к этой группе потоков
enumerate
public int enumerate(ThreadGroup[] list, boolean recurse)
recurse равно true, этот метод рекурсивно перечисляет все подгруппы этой группы потоков, и ссылки на все группы потоков в этих подгруппах также включаются. Приложение может использовать метод activeGroupCount для оценки, каким должен быть размер массива, однако если массив слишком короткий, чтобы вместить все группы потоков, дополнительные группы потоков игнорируются. Если крайне важно получить все подгруппы в этой группе потоков, вызывающий метод должен проверить, что возвращаемое значение int строго меньше длины list.
Из-за внутренней гонки в этом методе рекомендуется использовать его только для отладки и мониторинга.
- Parameters:
-
list- массив, в который нужно поместить список групп потоков -
recurse- еслиtrue, рекурсивно перечислить все подгруппы - Returns:
- количество групп потоков, помещенных в массив
- Throws:
-
SecurityException- если checkAccess определяет, что текущий поток не имеет доступа к этой группе потоков
stop
@Deprecated(since="1.2", forRemoval=true) public final void stop()
UnsupportedOperationException. interrupt
public final void interrupt()
- Throws:
-
SecurityException- если текущий поток не имеет разрешения на доступ к этой группе потоков или к каким-либо потокам в группе потоков. - Since:
- 1.2
- See Also:
suspend
@Deprecated(since="1.2", forRemoval=true) public final void suspend()
UnsupportedOperationException. resume
@Deprecated(since="1.2", forRemoval=true) public final void resume()
UnsupportedOperationException. destroy
@Deprecated(since="16", forRemoval=true) public final void destroy()
list
public void list()
uncaughtException
public void uncaughtException(Thread t, Throwable e)
Thread.UncaughtExceptionHandler. Метод uncaughtException класса ThreadGroup выполняет следующее:
- Если у этой группы потоков есть родительская группа потоков, вызывается метод
uncaughtExceptionродительской группы с теми же двумя аргументами. - В противном случае, этот метод проверяет, установлен ли стандартный обработчик необработанных исключений, и если да, вызывается его метод
uncaughtExceptionс теми же двумя аргументами. - В противном случае выводится сообщение, содержащее имя потока, возвращаемое методом
getNameпотока, и стек-трейс с помощью методаThrowableисключения в стандартный поток ошибок.
Приложения могут переопределять этот метод в подклассах ThreadGroup для предоставления альтернативной обработки необработанных исключений.
- Specified by:
-
uncaughtExceptionin interfaceThread.UncaughtExceptionHandler - Parameters:
-
t- поток, который собирается выйти. -
e- необработанное исключение.
toString
public String toString()
- Overrides:
-
toStringв классеObject - Returns:
- строковое представление этой группы потоков.
© 1993, 2023, 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/21/docs/api/java.base/java/lang/ThreadGroup.html