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