Интерфейс ThreadMXBean
- Все суперинтерфейсы:
- PlatformManagedObject
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., Способы доступа к MXBeans
Методы
| Модификатор и тип | Метод и описание |
|---|---|
ThreadInfo[] |
dumpAllThreads(boolean lockedMonitors,
boolean lockedSynchronizers) Возвращает информацию о всех активных потоках со стековой трассировкой и информацией о синхронизации. |
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) Возвращает информацию о каждом потоке, идентификатор которого находится в входном массиве |
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() Проверяет, поддерживает ли реализация виртуальной машины Java измерение времени выполнения на процессоре для любого потока. |
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, представляющий информацию о потоке для потока с указанным ID. Трассировка стека, заблокированные мониторы и заблокированные синхронизаторы в возвращаемом объекте ThreadInfo будут пустыми. Если поток с заданным ID не активен или не существует, этот метод вернет null. Поток считается активным, если он был запущен и еще не завершен.
Доступ к MBeanServer:
Сопоставленный тип ThreadInfo — это CompositeData с атрибутами, как указано в методе ThreadInfo.from.
- Параметры:
-
id- идентификатор потока. Должен быть положительным. - Возвращает:
- объект
ThreadInfoдля потока с заданным ID без трассировки стека, заблокированных мониторов и информации о синхронизаторах;nullесли поток с заданным ID не активен или не существует. - Вызывает исключение:
-
IllegalArgumentException- еслиid <= 0. -
SecurityException- если существует менеджер безопасности и вызывающий абонент не имеет права ManagementPermission("monitor").
getThreadInfo
ThreadInfo[] getThreadInfo(long[] ids)
Возвращает информацию о потоке для каждого потока, чей ID находится во входном массиве ids, без трассировки стека. Этот метод эквивалентен вызову:
getThreadInfo(ids, 0);
Этот метод возвращает массив объектов ThreadInfo. Трассировка стека, заблокированные мониторы и заблокированные синхронизаторы в каждом объекте ThreadInfo будут пустыми. Если поток с заданным ID не активен или не существует, соответствующий элемент в возвращаемом массиве будет содержать null. Поток считается активным, если он был запущен и еще не завершен.
Доступ к MBeanServer:
Сопоставленный тип ThreadInfo — это CompositeData с атрибутами, как указано в методе ThreadInfo.from.
- Параметры:
-
ids- массив идентификаторов потоков. - Возвращает:
- массив объектов
ThreadInfo, каждый из которых содержит информацию о потоке, чей ID находится в соответствующем элементе входного массива ID без трассировки стека, заблокированных мониторов и информации о синхронизаторах. - Вызывает исключение:
-
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.
Если поток с заданным ID не активен или не существует, этот метод вернет null. Поток считается активным, если он был запущен и еще не завершен.
Доступ к MBeanServer:
Сопоставленный тип ThreadInfo — это CompositeData с атрибутами, как указано в методе ThreadInfo.from.
- Параметры:
-
id- идентификатор потока. Должен быть положительным. -
maxDepth- максимальное количество записей в трассировке стека для выгрузки.Integer.MAX_VALUEможет использоваться для запроса выгрузки всего стека. - Возвращает:
- объект
ThreadInfoпотока с заданным ID без информации о заблокированных мониторах и синхронизаторах.nullесли поток с заданным ID не активен или не существует. - Вызывает исключение:
-
IllegalArgumentException- еслиid <= 0. -
IllegalArgumentException- еслиmaxDepth is negative. -
SecurityException- если существует менеджер безопасности и вызывающий абонент не имеет права ManagementPermission("monitor").
getThreadInfo
ThreadInfo[] getThreadInfo(long[] ids,
int maxDepth) Возвращает информацию о потоке для каждого потока, чей ID находится во входном массиве ids, с трассировкой стека из указанного числа элементов трассировки стека. Параметр maxDepth указывает максимальное количество элементов StackTraceElement, которые необходимо получить из трассировки стека. Если maxDepth == Integer.MAX_VALUE, будет выгружена вся трассировка стека потока. Если maxDepth == 0, трассировка стека потока не будет выгружена. Этот метод не получает заблокированные мониторы и заблокированные синхронизаторы потоков.
Когда виртуальная машина Java не имеет информации о трассировке стека о потоке или maxDepth == 0, трассировка стека в объекте ThreadInfo будет пустым массивом StackTraceElement.
Этот метод возвращает массив объектов ThreadInfo, каждый из которых представляет информацию о потоке с тем же индексом, что и в массиве ids. Если поток с заданным ID не активен или не существует, null будет установлен в соответствующем элементе возвращаемого массива. Поток считается активным, если он был запущен и еще не завершен.
Доступ к MBeanServer:
Сопоставленный тип ThreadInfo — это CompositeData с атрибутами, как указано в методе ThreadInfo.from.
- Параметры:
-
ids- массив идентификаторов потоков -
maxDepth- максимальное количество записей в трассировке стека для выгрузки.Integer.MAX_VALUEможет использоваться для запроса выгрузки всего стека. - Возвращает:
- массив объектов
ThreadInfo, каждый из которых содержит информацию о потоке, чей ID находится в соответствующем элементе входного массива ID без информации о заблокированных мониторах и синхронизаторах. - Вызывает исключение:
-
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, с отслеживанием стека и информацией о синхронизации.
Этот метод получает моментальный снимок информации о потоке для каждого потока, включая:
- полный стек отслеживания,
- объектные мониторы, которые в настоящее время заблокированы потоком, если
lockedMonitorsравноtrue, и - владеющие синхронизаторы, которые в настоящее время заблокированы потоком, если
lockedSynchronizersравноtrue.
Этот метод возвращает массив объектов ThreadInfo, каждый из которых содержит информацию о потоке с тем же индексом, что и в массиве ids. Если поток с заданным идентификатором не активен или не существует, null будет установлено в соответствующем элементе возвращаемого массива. Поток считается активным, если он был запущен и еще не завершился.
Если поток не блокирует ни один объектный монитор или lockedMonitors равно false, возвращаемый объект ThreadInfo будет иметь пустой массив MonitorInfo . Аналогично, если поток не блокирует ни один синхронизатор или lockedSynchronizers равно false, возвращаемый объект ThreadInfo будет иметь пустой массив LockInfo .
Когда оба параметра lockedMonitors и lockedSynchronizers равны false, это эквивалентно вызову:
getThreadInfo(ids, Integer.MAX_VALUE)
Этот метод предназначен для использования в процессе устранения неполадок, но не для управления синхронизацией. Он может быть ресурсоемким.
Доступ к MBeanServer:
Сопоставленный тип ThreadInfo — CompositeData с атрибутами, как указано в методе ThreadInfo.from.
- Параметры:
-
ids— массив идентификаторов потоков. -
lockedMonitors— еслиtrue, извлекает все заблокированные мониторы. -
lockedSynchronizers— еслиtrue, извлекает все заблокированные владеющие синхронизаторы. - Возвращает:
- массив объектов
ThreadInfo, каждый из которых содержит информацию о потоке, идентификатор которого находится в соответствующем элементе входного массива идентификаторов. - Исключения:
-
SecurityException— если существует диспетчер безопасности, и у вызывающего объекта нет разрешения ManagementPermission("monitor"). -
UnsupportedOperationException—- если
lockedMonitorsравноtrue, но виртуальная машина Java не поддерживает мониторинг использования объектного монитора; или - если
lockedSynchronizersравноtrue, но виртуальная машина Java не поддерживает мониторинг использования владеющего синхронизатора.
- если
- С:
- 1.6
- См. также:
-
isObjectMonitorUsageSupported(),isSynchronizerUsageSupported()
dumpAllThreads
ThreadInfo[] dumpAllThreads(boolean lockedMonitors,
boolean lockedSynchronizers) Возвращает информацию о потоке для всех активных потоков с отслеживанием стека и информацией о синхронизации. Некоторые потоки, включенные в возвращаемый массив, могут быть завершены к моменту возврата этого метода.
Этот метод возвращает массив объектов ThreadInfo, как указано в методе getThreadInfo(long[], boolean, boolean).
- Параметры:
-
lockedMonitors— еслиtrue, выводит все заблокированные мониторы. -
lockedSynchronizers— еслиtrue, выводит все заблокированные владеющие синхронизаторы. - Возвращает:
- массив
ThreadInfoдля всех активных потоков. - Исключения:
-
SecurityException— если существует диспетчер безопасности, и у вызывающего объекта нет разрешения ManagementPermission("monitor"). -
UnsupportedOperationException—- если
lockedMonitorsравноtrue, но виртуальная машина Java не поддерживает мониторинг использования объектного монитора; или - если
lockedSynchronizersравноtrue, но виртуальная машина Java не поддерживает мониторинг использования владеющего синхронизатора.
- если
- С:
- 1.6
- См. также:
-
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.