Интерфейс ThreadMXBean
- Все суперинтерфейсы:
PlatformManagedObject
- Все известные подинтерфейсы:
ThreadMXBean
public interface ThreadMXBean extends PlatformManagedObject
ThreadMXBean поддерживает мониторинг и управление платформенными потоками в виртуальной машине Java. Платформенные потоки обычно отображаются на потоки ядра, планируемые операционной системой. ThreadMXBean не поддерживает мониторинг или управление виртуальными потоками.
В виртуальной машине Java существует единственный экземпляр реализации этого интерфейса. Этот экземпляр, реализующий этот интерфейс, является MXBean, который можно получить, вызвав метод ManagementFactory.getThreadMXBean() или из метода platform MBeanServer.
Имя ObjectName для уникальной идентификации MXBean для системы потоков в пределах MBeanServer:
java.lang:type=Threading Его можно получить, вызвав метод PlatformManagedObject.getObjectName(). Идентификатор потока
Идентификатор потока — положительное значение типа long, возвращаемое при вызове методаthreadId() потока. Идентификатор потока уникален в течение его жизненного цикла. После завершения потока его идентификатор может быть повторно использован. Некоторые методы в этом интерфейсе принимают идентификатор потока или массив идентификаторов потоков в качестве входного параметра и возвращают информацию о каждом потоке.
Время выполнения потока на процессоре
Реализация виртуальной машины Java может поддерживать измерение времени выполнения на процессоре для текущего платформенного потока, для любого платформенного потока или для потоков. Метод isThreadCpuTimeSupported() можно использовать для определения того, поддерживает ли виртуальная машина Java измерение времени выполнения на процессоре для любого платформенного потока. Метод isCurrentThreadCpuTimeSupported() можно использовать для определения того, поддерживает ли виртуальная машина Java измерение времени выполнения на процессоре с методами getCurrentThreadCpuTime() и getCurrentThreadUserTime() из платформенного потока.
Время выполнения на процессоре, предоставляемое этим интерфейсом, имеет наносекундную точность, но не обязательно наносекундную точность.
Виртуальная машина Java может по умолчанию отключить измерение времени выполнения на процессоре. Методы isThreadCpuTimeEnabled() и setThreadCpuTimeEnabled(boolean) можно использовать для проверки, включено ли измерение времени выполнения на процессоре, и для включения/отключения этой поддержки соответственно. Включение измерения времени выполнения потока на процессоре может быть дорогостоящим в некоторых реализациях виртуальных машин Java.
Мониторинг конкуренции потоков
Некоторые виртуальные машины Java могут поддерживать мониторинг конкуренции потоков. При включенном мониторинге конкуренции потоков будет собираться и возвращаться накопленное время, в течение которого поток был заблокирован для синхронизации или ожидания уведомления, в объектеThreadInfo. Метод isThreadContentionMonitoringSupported() можно использовать для определения того, поддерживает ли виртуальная машина Java мониторинг конкуренции потоков. Мониторинг конкуренции потоков отключен по умолчанию. Метод setThreadContentionMonitoringEnabled(boolean) можно использовать для включения мониторинга конкуренции потоков.
Информация о синхронизации и обнаружение тупиков
Некоторые виртуальные машины Java могут поддерживать мониторинг использования монитора объекта и использования синхронизатора. МетодыgetThreadInfo(long[], boolean, boolean) и dumpAllThreads(boolean, boolean) могут использоваться для получения стека вызовов потока и информации о синхронизации, включая, какой блокировку поток ожидает получить или на каком блокируется, и какие блокировки поток в настоящее время владеет. Интерфейс ThreadMXBean предоставляет методы findMonitorDeadlockedThreads() и findDeadlockedThreads() для поиска тупиков в работающем приложении.
- С:
- 1.5
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
ThreadInfo[] |
dumpAllThreads |
Возвращает информацию о потоках всех активных платформенных потоков с отслеживанием стека и информацией о синхронизации. |
default ThreadInfo[] |
dumpAllThreads |
Возвращает информацию о потоках всех активных платформенных потоков с отслеживанием стека указанного максимального количества элементов и информацией о синхронизации. |
long[] |
findDeadlockedThreads() |
Находит циклы платформенных потоков, которые находятся в тупике, ожидая получения мониторов объектов или доступных синхронизаторов. |
long[] |
findMonitorDeadlockedThreads() |
Находит циклы платформенных потоков, которые находятся в тупике, ожидая получения мониторов объектов. |
long[] |
getAllThreadIds() |
Возвращает идентификаторы потоков всех активных платформенных потоков. |
long |
getCurrentThreadCpuTime() |
Возвращает общее время выполнения текущего потока в наносекундах. |
long |
getCurrentThreadUserTime() |
Возвращает время выполнения текущего потока в пользовательском режиме в наносекундах. |
int |
getDaemonThreadCount() |
Возвращает текущее количество активных платформенных потоков, которые являются демонами. |
int |
getPeakThreadCount() |
Возвращает максимальное количество активных платформенных потоков с момента запуска виртуальной машины Java или с момента сброса максимума. |
int |
getThreadCount() |
Возвращает текущее количество активных платформенных потоков, включая как демонов, так и не-демонов. |
long |
getThreadCpuTime |
Возвращает общее время выполнения потока с указанным идентификатором в наносекундах. |
ThreadInfo |
getThreadInfo |
Возвращает информацию о потоке для потока с указанным id без отслеживания стека. |
ThreadInfo[] |
getThreadInfo |
Возвращает информацию о потоке для каждого потока, идентификатор которого находится в входном массиве ids без отслеживания стека. |
ThreadInfo[] |
getThreadInfo |
Возвращает информацию о потоке для каждого потока, идентификатор которого находится в входном массиве ids, с отслеживанием стека и информацией о синхронизации. |
default ThreadInfo[] |
getThreadInfo |
Возвращает информацию о потоке для каждого потока, идентификатор которого находится в входном массиве ids, с отслеживанием стека указанного максимального количества элементов и информацией о синхронизации. |
ThreadInfo[] |
getThreadInfo |
Возвращает информацию о потоке для каждого потока, идентификатор которого находится в входном массиве ids, с отслеживанием стека заданного количества элементов стека. |
ThreadInfo |
getThreadInfo |
Возвращает информацию о потоке для потока с указанным id, с отслеживанием стека заданного количества элементов стека. |
long |
getThreadUserTime |
Возвращает время выполнения потока с указанным идентификатором в пользовательском режиме в наносекундах. |
long |
getTotalStartedThreadCount() |
Возвращает общее количество созданных и запущенных платформенных потоков с момента запуска виртуальной машины Java. |
boolean |
isCurrentThreadCpuTimeSupported() |
Проверяет, поддерживает ли виртуальная машина Java измерение времени процессора платформенного потока с помощью методов getCurrentThreadCpuTime() и getCurrentThreadUserTime(). |
boolean |
isObjectMonitorUsageSupported() |
Проверяет, поддерживает ли виртуальная машина Java мониторинг использования монитора объекта. |
boolean |
isSynchronizerUsageSupported() |
Проверяет, поддерживает ли виртуальная машина Java мониторинг использования доступных синхронизаторов. |
boolean |
isThreadContentionMonitoringEnabled() |
Проверяет, включён ли мониторинг конкуренции потоков. |
boolean |
isThreadContentionMonitoringSupported() |
Проверяет, поддерживает ли виртуальная машина Java мониторинг конкуренции потоков. |
boolean |
isThreadCpuTimeEnabled() |
Проверяет, включено ли измерение времени процессора потоков. |
boolean |
isThreadCpuTimeSupported() |
Проверяет, поддерживает ли реализация виртуальной машины Java измерение времени процессора для любого платформенного потока. |
void |
resetPeakThreadCount() |
Сбрасывает максимальное количество потоков до текущего количества активных платформенных потоков. |
void |
setThreadContentionMonitoringEnabled |
Включает или отключает мониторинг конкуренции потоков. |
void |
setThreadCpuTimeEnabled |
Включает или отключает измерение времени процессора потоков. |
Методы, объявленные в интерфейсе java.lang.management.PlatformManagedObject
getObjectName
Подробное описание методов
getThreadCount
int getThreadCount()
- Возвращает:
- текущее количество активных потоков платформы.
getPeakThreadCount
int getPeakThreadCount()
- Возвращает:
- максимальное количество активных потоков платформы.
getTotalStartedThreadCount
long getTotalStartedThreadCount()
- Возвращает:
- общее количество запущенных потоков платформы.
getDaemonThreadCount
int getDaemonThreadCount()
- Возвращает:
- текущее количество активных потоков платформы, являющихся демоническими потоками.
getAllThreadIds
long[] getAllThreadIds()
- Возвращает:
- массив
long, каждый из которых является идентификатором потока. - Исключения:
-
SecurityException- если существует менеджер безопасности, и у вызывающего объекта нет разрешения ManagementPermission("monitor").
getThreadInfo
ThreadInfo getThreadInfo(long id)
id без трассировки стека. Этот метод эквивалентен вызову: getThreadInfo(id, 0); Этот метод возвращает объект ThreadInfo, представляющий информацию о потоке с указанным идентификатором. Трассировка стека, заблокированные мониторы и заблокированные синхронизаторы в возвращаемом объекте ThreadInfo будут пустыми. Если поток с данным идентификатором является виртуальным потоком, не активен или не существует, то этот метод вернёт null. Поток считается активным, если он был запущен и ещё не завершен.
Доступ к MBeanServer:
Картируемый тип ThreadInfo — это CompositeData, с атрибутами, как указано в методе ThreadInfo.from.
- Параметры:
-
id- идентификатор потока. Должен быть положительным. - Возвращает:
- объект
ThreadInfoдля потока с заданным идентификатором без трассировки стека, без заблокированных мониторов и информации о синхронизаторах;nullесли поток с заданным идентификатором является виртуальным потоком, неактивен или не существует. - Исключения:
-
IllegalArgumentException- еслиid <= 0. -
SecurityException- если существует менеджер безопасности, и у вызывающего объекта нет разрешения ManagementPermission("monitor").
getThreadInfo
ThreadInfo[] getThreadInfo(long[] ids)
ids без трассировки стека. Этот метод эквивалентен вызову: getThreadInfo(ids, 0);
Этот метод возвращает массив объектов ThreadInfo. Трассировка стека, заблокированные мониторы и заблокированные синхронизаторы в каждом объекте ThreadInfo будут пустыми. Если поток с заданным идентификатором является виртуальным потоком, не активен или не существует, соответствующий элемент в возвращаемом массиве будет содержать null. Поток считается активным, если он был запущен и ещё не завершен.
Доступ к MBeanServer:
Картируемый тип ThreadInfo — это CompositeData, с атрибутами, как указано в методе ThreadInfo.from.
- Параметры:
-
ids- массив идентификаторов потоков. - Возвращает:
- массив объектов
ThreadInfo, каждый из которых содержит информацию о потоке, чья идентификатор находится в соответствующем элементе входного массива идентификаторов, без трассировки стека, без заблокированных мониторов и информации о синхронизаторах. - Исключения:
-
IllegalArgumentException- если какой-либо элемент в входном массивеidsимеет значение<= 0. -
SecurityException- если существует менеджер безопасности, и у вызывающего объекта нет разрешения ManagementPermission("monitor").
getThreadInfo
ThreadInfo getThreadInfo(long id, int maxDepth)
id, с трассировкой стека заданного количества элементов. Параметр maxDepth указывает максимальное число элементов StackTraceElement, которые должны быть извлечены из трассировки стека. Если maxDepth == Integer.MAX_VALUE, вся трассировка стека потока будет получена. Если maxDepth == 0, трассировка стека потока не будет получена. Данный метод не получает заблокированных мониторов и заблокированных синхронизаторов потока. Если у виртуальной машины Java нет информации о трассировке стека потока или maxDepth == 0, трассировка стека в объекте ThreadInfo будет пустым массивом элементов StackTraceElement.
Если поток с заданным идентификатором является виртуальным потоком, неактивен или не существует, данный метод вернет null. Поток считается активным, если он был запущен и ещё не завершен.
Доступ к MBeanServer:
Картируемый тип ThreadInfo — это CompositeData, с атрибутами, как указано в методе ThreadInfo.from.
- Параметры:
-
id- идентификатор потока. Должен быть положительным. -
maxDepth- максимальное количество записей в трассировке стека, которые должны быть получены.Integer.MAX_VALUEможет быть использовано для запроса всей трассировки стека. - Возвращает:
- объект
ThreadInfoпотока с заданным идентификатором без заблокированных мониторов и информации о синхронизаторах.nullесли поток с заданным идентификатором является виртуальным потоком, неактивен или не существует. - Исключения:
-
IllegalArgumentException- еслиid <= 0. -
IllegalArgumentException- еслиmaxDepth is negative. -
SecurityException- если существует менеджер безопасности, и у вызывающего объекта нет разрешения ManagementPermission("monitor").
getThreadInfo
ThreadInfo[] getThreadInfo(long[] ids, int maxDepth)
ids, с трассировкой стека заданного количества элементов. Параметр maxDepth указывает максимальное количество элементов StackTraceElement, которые должны быть извлечены из трассировки стека. Если maxDepth == Integer.MAX_VALUE, вся трассировка стека потока будет получена. Если maxDepth == 0, трассировка стека потока не будет получена. Данный метод не получает заблокированных мониторов и заблокированных синхронизаторов потоков. Если у виртуальной машины Java нет информации о трассировке стека потока или maxDepth == 0, трассировка стека в объекте ThreadInfo будет пустым массивом элементов StackTraceElement.
Этот метод возвращает массив объектов ThreadInfo, каждый из которых содержит информацию о потоке с тем же индексом, что и в массиве ids. Если поток с заданным идентификатором является виртуальным потоком, неактивен или не существует, null будет установлено в соответствующем элементе возвращаемого массива. Поток считается активным, если он был запущен и ещё не завершен.
Доступ к MBeanServer:
Картируемый тип ThreadInfo — это CompositeData, с атрибутами, как указано в методе ThreadInfo.from.
- Параметры:
-
ids- массив идентификаторов потоков -
maxDepth- максимальное количество записей в трассировке стека, которые должны быть получены.Integer.MAX_VALUEможет быть использовано для запроса всей трассировки стека. - Возвращает:
- массив объектов
ThreadInfo, каждый из которых содержит информацию о потоке, чья идентификатор находится в соответствующем элементе входного массива идентификаторов, без заблокированных мониторов и информации о синхронизаторах. - Исключения:
-
IllegalArgumentException- еслиmaxDepth is negative. -
IllegalArgumentException- если какой-либо элемент в входном массивеidsимеет значение<= 0. -
SecurityException- если существует менеджер безопасности, и у вызывающего объекта нет разрешения ManagementPermission("monitor").
isThreadContentionMonitoringSupported
boolean isThreadContentionMonitoringSupported()
- Возвращает:
-
trueесли виртуальная машина Java поддерживает мониторинг конкуренции за потоки;falseв противном случае.
isThreadContentionMonitoringEnabled
boolean isThreadContentionMonitoringEnabled()
- Возвращает:
-
trueесли мониторинг конкуренции за потоки включён;falseв противном случае. - Исключения:
-
UnsupportedOperationException- если виртуальная машина Java не поддерживает мониторинг конкуренции за потоки. - См. также:
setThreadContentionMonitoringEnabled
void setThreadContentionMonitoringEnabled(boolean enable)
- Parameters:
-
enable-trueдля включения;falseдля отключения. - Throws:
-
UnsupportedOperationException- если виртуальная машина Java не поддерживает мониторинг конкуренции потоков. -
SecurityException- если существует менеджер безопасности, и вызывающий объект не имеет разрешения ManagementPermission("control"). - See Also:
getCurrentThreadCpuTime
long getCurrentThreadCpuTime()
Это удобный метод для локального управления и эквивалентен вызову:
getThreadCpuTime(Thread.currentThread().threadId());
- Returns:
- общее время выполнения текущего потока, если текущий поток — это платформенный поток и если измерение времени процессора включено;
-1в противном случае. - Throws:
-
UnsupportedOperationException- если виртуальная машина Java не поддерживает измерение времени процессора для текущего потока. - See Also:
getCurrentThreadUserTime
long getCurrentThreadUserTime()
Это удобный метод для локального управления и эквивалентен вызову:
getThreadUserTime(Thread.currentThread().threadId());
- Returns:
- время CPU в пользовательском режиме для текущего потока, если текущий поток — платформенный поток и если измерение времени процессора включено;
-1в противном случае. - Throws:
-
UnsupportedOperationException- если виртуальная машина Java не поддерживает измерение времени процессора для текущего потока. - See Also:
getThreadCpuTime
long getThreadCpuTime(long id)
Если поток с указанным идентификатором является виртуальным потоком, не является активным или не существует, этот метод возвращает -1. Если измерение времени процессора отключено, этот метод возвращает -1. Поток активен, если он был запущен и еще не завершён.
Если измерение времени процессора включено после запуска потока, реализация виртуальной машины Java может выбрать любое время до и включая время включения возможности в качестве точки, с которой начинается измерение времени процессора.
- Parameters:
-
id- идентификатор потока - Returns:
- общее время выполнения потока с указанным идентификатором, если поток с указанным идентификатором является платформенным потоком, поток активен, и измерение времени процессора включено;
-1в противном случае. - Throws:
-
IllegalArgumentException- еслиid <= 0. -
UnsupportedOperationException- если виртуальная машина Java не поддерживает измерение времени процессора для других потоков. - See Also:
getThreadUserTime
long getThreadUserTime(long id)
Если поток с указанным идентификатором является виртуальным потоком, не является активным или не существует, этот метод возвращает -1. Если измерение времени процессора отключено, этот метод возвращает -1. Поток активен, если он был запущен и еще не завершён.
Если измерение времени процессора включено после запуска потока, реализация виртуальной машины Java может выбрать любое время до и включая время включения возможности в качестве точки, с которой начинается измерение времени процессора.
- Parameters:
-
id- идентификатор потока - Returns:
- время CPU в пользовательском режиме для потока с указанным идентификатором, если поток с указанным идентификатором является платформенным потоком, поток активен, и измерение времени процессора включено;
-1в противном случае. - Throws:
-
IllegalArgumentException- еслиid <= 0. -
UnsupportedOperationException- если виртуальная машина Java не поддерживает измерение времени процессора для других потоков. - See Also:
isThreadCpuTimeSupported
boolean isThreadCpuTimeSupported()
- Returns:
-
trueесли виртуальная машина Java поддерживает измерение времени процессора для любого платформенного потока;falseв противном случае.
isCurrentThreadCpuTimeSupported
boolean isCurrentThreadCpuTimeSupported()
getCurrentThreadCpuTime() и getCurrentThreadUserTime(). Этот метод возвращает true если isThreadCpuTimeSupported() возвращает true.- Returns:
-
trueесли виртуальная машина Java поддерживает измерение времени процессора текущего платформенного потока;falseв противном случае.
isThreadCpuTimeEnabled
boolean isThreadCpuTimeEnabled()
- Returns:
-
trueесли измерение времени процессора потока включено;falseв противном случае. - Throws:
-
UnsupportedOperationException- если виртуальная машина Java не поддерживает измерение времени процессора ни для других потоков, ни для текущего потока. - See Also:
setThreadCpuTimeEnabled
void setThreadCpuTimeEnabled(boolean enable)
- Parameters:
-
enable-trueдля включения;falseдля отключения. - Throws:
-
UnsupportedOperationException- если виртуальная машина Java не поддерживает измерение времени процессора ни для каких потоков, ни для текущего потока. -
SecurityException- если существует менеджер безопасности, и вызывающий объект не имеет разрешения ManagementPermission("control"). - See Also:
findMonitorDeadlockedThreads
long[] findMonitorDeadlockedThreads()
Object.wait, где каждый поток платформы владеет одним монитором, пытаясь получить другой монитор, уже удерживаемый другим потоком платформы в цикле. Циклы, включающие виртуальные потоки, этим методом не обнаруживаются. Более формально, поток считается заблокированным в тупике монитора, если он является частью цикла в отношении «ожидает монитор объекта, которым владеет». В простейшем случае поток A заблокирован, ожидая монитор, которым владеет поток B, а поток B заблокирован, ожидая монитор, которым владеет поток A.
Этот метод предназначен для использования в процессе устранения неполадок, но не для управления синхронизацией. Он может быть ресурсоемким.
Этот метод находит тупики, включающие только мониторы объектов. Для нахождения тупиков, включающих как мониторы объектов, так и блокируемые синхронизаторы, следует использовать метод findDeadlockedThreads.
- Возвращает:
- массив идентификаторов потоков платформы, которые находятся в тупике монитора, если таковые имеются;
nullв противном случае. - Выбрасывает:
-
SecurityException- если существует менеджер безопасности, и вызывающий поток не обладает разрешением ManagementPermission("monitor"). - См. также:
resetPeakThreadCount
void resetPeakThreadCount()
- Выбрасывает:
-
SecurityException- если существует менеджер безопасности, и вызывающий поток не обладает разрешением ManagementPermission("control"). - См. также:
findDeadlockedThreads
long[] findDeadlockedThreads()
Этот метод предназначен для использования в процессе устранения неполадок, но не для управления синхронизацией. Он может быть ресурсоемким.
- Возвращает:
- массив идентификаторов потоков платформы, которые заблокированы в тупике, ожидая мониторов объектов или блокируемых синхронизаторов, если таковые имеются;
nullв противном случае. - Выбрасывает:
-
SecurityException- если существует менеджер безопасности, и вызывающий поток не обладает разрешением ManagementPermission("monitor"). -
UnsupportedOperationException- если виртуальная машина Java не поддерживает мониторинг использования блокируемых синхронизаторов. - С момента:
- 1.6
- См. также:
isObjectMonitorUsageSupported
boolean isObjectMonitorUsageSupported()
- Возвращает:
-
trueесли виртуальная машина Java поддерживает мониторинг использования мониторов объектов;falseв противном случае. - С момента:
- 1.6
- См. также:
isSynchronizerUsageSupported
boolean isSynchronizerUsageSupported()
- Возвращает:
-
trueесли виртуальная машина Java поддерживает мониторинг использования блокируемых синхронизаторов;falseв противном случае. - С момента:
- 1.6
- См. также:
getThreadInfo
ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers)
ids, с трассировкой стека и информацией о синхронизации. Это эквивалентно вызову: getThreadInfo(ids, lockedMonitors, lockedSynchronizers, Integer.MAX_VALUE)
- Параметры:
-
ids- массив идентификаторов потоков. -
lockedMonitors- еслиtrue, извлекает все заблокированные мониторы. -
lockedSynchronizers- еслиtrue, извлекает все заблокированные блокируемые синхронизаторы. - Возвращает:
- массив объектов
ThreadInfo, каждый из которых содержит информацию о потоке, чей идентификатор находится в соответствующем элементе входного массива идентификаторов. - Выбрасывает:
-
SecurityException- если существует менеджер безопасности, и вызывающий поток не обладает разрешением ManagementPermission("monitor"). -
UnsupportedOperationException-- если
lockedMonitorsравноtrue, но виртуальная машина Java не поддерживает мониторинг использования мониторов объектов; или - если
lockedSynchronizersравноtrue, но виртуальная машина Java не поддерживает мониторинг использования блокируемых синхронизаторов.
- если
- С момента:
- 1.6
- См. также:
getThreadInfo
default ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers, int maxDepth)
ids, с трассировкой стека заданной максимальной длины и информацией о синхронизации. Если maxDepth == 0, трассировка стека потока не будет выведена. Этот метод получает моментальный снимок информации о потоке для каждого потока, включая:
- трассировку стека заданной максимальной длины,
- мониторы объектов, текущие заблокированы потоком, если
lockedMonitorsравноtrue, и - блокируемые синхронизаторы, текущие заблокированы потоком, если
lockedSynchronizersравноtrue.
Этот метод возвращает массив объектов ThreadInfo, каждый из которых содержит информацию о потоке с таким же индексом, как в массиве ids. Если поток с заданным идентификатором является виртуальным потоком, неактивным или не существует, null будет установлено в соответствующем элементе возвращаемого массива. Поток считается активным, если он был запущен и еще не завершен.
Если поток не блокирует ни один монитор объекта или lockedMonitors равно false, возвращаемый объект ThreadInfo будет иметь пустой массив MonitorInfo. Аналогично, если поток не блокирует ни один синхронизатор или lockedSynchronizers равно false, возвращаемый объект ThreadInfo будет иметь пустой массив LockInfo.
Когда оба параметра lockedMonitors и lockedSynchronizers равны false, это эквивалентно вызову:
getThreadInfo(ids, maxDepth)
Этот метод предназначен для использования в процессе устранения неполадок, но не для управления синхронизацией. Он может быть ресурсоемким.
Доступ к MBeanServer:
Сопоставленный тип ThreadInfo - это CompositeData со свойствами, как указано в методе ThreadInfo.from.
- Требования к реализации:
- В реализации по умолчанию выбрасывается
UnsupportedOperationException. - Параметры:
-
ids- массив идентификаторов потоков. -
lockedMonitors- еслиtrue, извлекает все заблокированные мониторы. -
lockedSynchronizers- еслиtrue, извлекает все заблокированные блокируемые синхронизаторы. -
maxDepth- указывает максимальное числоStackTraceElementдля извлечения из трассировки стека. - Возвращает:
- массив объектов
ThreadInfo, каждый из которых содержит информацию о потоке, чей идентификатор находится в соответствующем элементе входного массива идентификаторов. - Выбрасывает:
-
IllegalArgumentException- еслиmaxDepthотрицательно. -
SecurityException- если существует менеджер безопасности, и вызывающий поток не обладает разрешением ManagementPermission("monitor"). -
UnsupportedOperationException-- если
lockedMonitorsравноtrue, но виртуальная машина Java не поддерживает мониторинг использования мониторов объектов; или - если
lockedSynchronizersравноtrue, но виртуальная машина Java не поддерживает мониторинг использования блокируемых синхронизаторов.
- если
- С момента:
- 10
- См. также:
dumpAllThreads
ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers)
dumpAllThreads(lockedMonitors, lockedSynchronizers, Integer.MAX_VALUE)
- Parameters:
-
lockedMonitors- еслиtrue, вывести все заблокированные мониторы. -
lockedSynchronizers- еслиtrue, вывести все заблокированные синхронизаторы. - Returns:
- массив объектов
ThreadInfoдля всех активных потоков платформы. - Throws:
-
SecurityException- если существует менеджер безопасности, и вызывающий поток не имеет разрешения ManagementPermission("monitor"). -
UnsupportedOperationException-- если
lockedMonitorsравноtrue, но виртуальная машина Java не поддерживает мониторинг использования монитора объекта; или - если
lockedSynchronizersравноtrue, но виртуальная машина Java не поддерживает мониторинг использования синхронизатора.
- если
- Since:
- 1.6
- See Also:
dumpAllThreads
default ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers, int maxDepth)
maxDepth == 0, трассировка стека потока не будет выведена. Идентификаторы потоков виртуальных потоков не включаются. Некоторые потоки, включенные в возвращаемый массив, могут быть завершены к моменту возврата этого метода. Этот метод возвращает массив объектов ThreadInfo, как указано в методе getThreadInfo(long[], boolean, boolean, int).
- Implementation Requirements:
- Реализация по умолчанию выбрасывает
UnsupportedOperationException. - Parameters:
-
lockedMonitors- еслиtrue, вывести все заблокированные мониторы. -
lockedSynchronizers- еслиtrue, вывести все заблокированные синхронизаторы. -
maxDepth- указывает максимальное количество элементовStackTraceElementдля извлечения из трассировки стека. - Returns:
- массив объектов
ThreadInfoдля всех активных потоков платформы. - Throws:
-
IllegalArgumentException- еслиmaxDepthотрицательное. -
SecurityException- если существует менеджер безопасности, и вызывающий поток не имеет разрешения ManagementPermission("monitor"). -
UnsupportedOperationException-- если
lockedMonitorsравноtrue, но виртуальная машина Java не поддерживает мониторинг использования монитора объекта; или - если
lockedSynchronizersравноtrue, но виртуальная машина Java не поддерживает мониторинг использования синхронизатора.
- если
- Since:
- 10
- See Also:
© 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.management/java/lang/management/ThreadMXBean.html