Spec-Zone.ru › OpenJDK 25

Интерфейс ThreadMXBean

Все суперинтерфейсы:
PlatformManagedObject
Все известные подинтерфейсы:
ThreadMXBean
public interface ThreadMXBean extends PlatformManagedObject
Интерфейс управления системой потоков виртуальной машины Java.

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
См. также:
  • ManagementFactory.getPlatformMXBeans(Class)
  • Спецификация JMX.
  • Способы доступа к MXBeans

Краткое описание методов

Модификатор и тип Метод Описание
ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers)
Возвращает информацию о потоках для всех работающих платформенных потоков, включая трассировки стека и сведения о синхронизации.
default ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers, int maxDepth)
Возвращает информацию о потоках для всех работающих платформенных потоков, включая трассировки стека, ограниченные указанным максимальным числом элементов, и сведения о синхронизации. Если maxDepth == 0, трассировка стека потока не будет выгружена.
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)
Возвращает информацию о потоке с указанным id без трассировки стека.
ThreadInfo[] getThreadInfo(long[] ids)
Возвращает информацию о каждом потоке, идентификатор которого содержится во входном массиве ids, без трассировки стека.
ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers)
Возвращает информацию о каждом потоке, идентификатор которого содержится во входном массиве ids, включая трассировку стека и сведения о синхронизации.
default ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers, int maxDepth)
Возвращает информацию о каждом потоке, идентификатор которого содержится во входном массиве ids, включая трассировку стека, ограниченную указанным максимальным числом элементов, и сведения о синхронизации.
ThreadInfo[] getThreadInfo(long[] ids, int maxDepth)
Возвращает информацию о каждом потоке, идентификатор которого содержится во входном массиве ids, включая трассировку стека с указанным количеством элементов.
ThreadInfo getThreadInfo(long id, int maxDepth)
Возвращает информацию о потоке с указанным id, включая трассировку стека с указанным количеством элементов.
long getThreadUserTime(long id)
Возвращает процессорное время, в течение которого поток с указанным идентификатором выполнялся в пользовательском режиме, в наносекундах.
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(boolean enable)
Включает или отключает мониторинг конкуренции потоков.
void setThreadCpuTimeEnabled(boolean enable)
Включает или отключает измерение процессорного времени потоков.

Методы, объявленные в интерфейсе PlatformManagedObject

getObjectName

Подробное описание методов

getThreadCount

int getThreadCount()
Возвращает текущее количество работающих платформенных потоков, включая потоки-демоны и обычные потоки. В это количество не входят виртуальные потоки.
Возвращает:
текущее количество работающих платформенных потоков.

getPeakThreadCount

int getPeakThreadCount()
Возвращает пиковое количество работающих платформенных потоков с момента запуска виртуальной машины Java или сброса пикового значения. В это количество не входят виртуальные потоки.
Возвращает:
пиковое количество работающих платформенных потоков.

getTotalStartedThreadCount

long getTotalStartedThreadCount()
Возвращает общее количество платформенных потоков, созданных и запущенных с момента запуска виртуальной машины Java. В это количество не входят виртуальные потоки.
Возвращает:
общее количество запущенных платформенных потоков.

getDaemonThreadCount

int getDaemonThreadCount()
Возвращает текущее количество работающих платформенных потоков-демонов. В это количество не входят виртуальные потоки.
Возвращает:
текущее количество работающих платформенных потоков-демонов.

getAllThreadIds

long[] getAllThreadIds()
Возвращает идентификаторы всех работающих платформенных потоков. Идентификаторы виртуальных потоков не включаются. Некоторые потоки из возвращённого массива могут завершиться к моменту возврата этого метода.
Возвращает:
массив long, каждый элемент которого является идентификатором потока.

getThreadInfo

ThreadInfo getThreadInfo(long id)
Возвращает информацию о потоке с указанным id без трассировки стека. Этот метод эквивалентен вызову:
getThreadInfo(id, 0);

Этот метод возвращает объект ThreadInfo, содержащий информацию о потоке с указанным идентификатором. Трассировка стека, заблокированные мониторы и заблокированные синхронизаторы в возвращённом объекте ThreadInfo будут пустыми. Если поток с указанным идентификатором является виртуальным потоком, не работает или не существует, этот метод вернёт null. Поток считается работающим, если он был запущен и ещё не завершился.

Доступ через MBeanServer:
Сопоставленный тип ThreadInfo — CompositeData с атрибутами, указанными в методе ThreadInfo.from.

Параметры:
id — идентификатор потока. Должен быть положительным.
Возвращает:
объект ThreadInfo для потока с указанным идентификатором без трассировки стека, заблокированного монитора и информации о синхронизаторах; null, если поток с указанным идентификатором является виртуальным потоком, не работает или не существует.
Выбрасывает:
IllegalArgumentException — если id <= 0.

getThreadInfo

ThreadInfo[] getThreadInfo(long[] ids)
Возвращает информацию о каждом потоке, идентификатор которого содержится во входном массиве ids, без трассировки стека. Этот метод эквивалентен вызову:
  getThreadInfo(ids, 0);

Этот метод возвращает массив объектов ThreadInfo. Трассировка стека, заблокированные мониторы и заблокированные синхронизаторы в каждом объекте ThreadInfo будут пустыми. Если поток с указанным идентификатором является виртуальным потоком, не работает или не существует, соответствующий элемент возвращённого массива будет содержать null. Поток считается работающим, если он был запущен и ещё не завершился.

Доступ через MBeanServer:
Сопоставленный тип ThreadInfo — CompositeData с атрибутами, указанными в методе ThreadInfo.from.

Параметры:
ids — массив идентификаторов потоков.
Возвращает:
массив объектов ThreadInfo, каждый из которых содержит информацию о потоке с идентификатором, находящимся в соответствующем элементе входного массива идентификаторов, без трассировки стека, заблокированного монитора и информации о синхронизаторах.
Выбрасывает:
IllegalArgumentException — если любой элемент входного массива ids является <= 0.

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.

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.

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 не поддерживает мониторинг конкуренции потоков.
См. также:
  • isThreadContentionMonitoringSupported()

getCurrentThreadCpuTime

long getCurrentThreadCpuTime()
Возвращает общее время ЦП для текущего потока в наносекундах. Возвращаемое значение имеет точность до наносекунд, но не обязательно обладает точностью в наносекундах. Если реализация различает время в пользовательском и системном режимах, возвращаемое время ЦП — это время выполнения текущего потока в пользовательском или системном режиме.

Это вспомогательный метод для локального управления, эквивалентный вызову:

  getThreadCpuTime(Thread.currentThread().threadId());
Возвращает:
общее время ЦП для текущего потока, если текущий поток является платформенным и измерение времени ЦП включено; в противном случае — -1.
Выбрасывает:
UnsupportedOperationException — если виртуальная машина Java не поддерживает измерение времени ЦП для текущего потока.
См. также:
  • getCurrentThreadUserTime()
  • isCurrentThreadCpuTimeSupported()
  • isThreadCpuTimeEnabled()
  • setThreadCpuTimeEnabled(boolean)

getCurrentThreadUserTime

long getCurrentThreadUserTime()
Возвращает время ЦП, в течение которого текущий поток выполнялся в пользовательском режиме, в наносекундах. Возвращаемое значение имеет точность до наносекунд, но не обязательно обладает точностью в наносекундах.

Это вспомогательный метод для локального управления, эквивалентный вызову:

  getThreadUserTime(Thread.currentThread().threadId());
Возвращает:
время ЦП на уровне пользователя для текущего потока, если текущий поток является платформенным и измерение времени ЦП включено; в противном случае — -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 измерение времени ЦП из платформенного потока с помощью методов getCurrentThreadCpuTime() и getCurrentThreadUserTime(). Этот метод возвращает 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 не поддерживает измерение времени ЦП ни для каких потоков, включая текущий.
См. также:
  • isThreadCpuTimeSupported()
  • isCurrentThreadCpuTimeSupported()

findMonitorDeadlockedThreads

long[] findMonitorDeadlockedThreads()
Находит циклы платформенных потоков, заблокированных в ожидании получения объектных мониторов. Иными словами, находит платформенные потоки, заблокированные при попытке войти в блок синхронизации или повторно войти в него после вызова Object.wait, когда каждый платформенный поток владеет одним монитором и пытается получить другой монитор, уже удерживаемый другим платформенным потоком в цикле. Циклы, включающие виртуальные потоки, этим методом не обнаруживаются.

В более формальном смысле поток находится в состоянии взаимной блокировки на мониторе, если он является частью цикла в отношении «ожидает объектный монитор, которым владеет». В простейшем случае поток A заблокирован в ожидании монитора, которым владеет поток B, а поток B заблокирован в ожидании монитора, которым владеет поток A.

Этот метод предназначен для поиска и устранения неисправностей, а не для управления синхронизацией. Его выполнение может быть затратным.

Этот метод обнаруживает взаимные блокировки, связанные только с объектными мониторами. Для обнаружения взаимных блокировок, связанных и с объектными мониторами, и с синхронизаторами с владельцем, следует использовать метод findDeadlockedThreads.

Возвращает:
массив идентификаторов платформенных потоков, находящихся во взаимной блокировке на мониторах, если такие есть; в противном случае — null.
См. также:
  • findDeadlockedThreads()

resetPeakThreadCount

void resetPeakThreadCount()
Сбрасывает пиковое количество потоков до текущего количества работающих платформенных потоков.
См. также:
  • getPeakThreadCount()
  • getThreadCount()

findDeadlockedThreads

long[] findDeadlockedThreads()
Находит циклы платформенных потоков, заблокированных в ожидании получения объектных мониторов или синхронизаторов с владельцем. Платформенные потоки находятся во взаимной блокировке в цикле ожидания блокировки одного из этих двух типов, если каждый поток владеет одной блокировкой и пытается получить другую блокировку, уже удерживаемую другим платформенным потоком в цикле. Циклы, включающие виртуальные потоки, этим методом не обнаруживаются.

Этот метод предназначен для поиска и устранения неисправностей, а не для управления синхронизацией. Его выполнение может быть затратным.

Возвращает:
массив идентификаторов платформенных потоков, заблокированных в ожидании объектных мониторов или синхронизаторов с владельцем, если такие есть; в противном случае — null.
Выбрасывает:
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, каждый из которых содержит информацию о потоке с идентификатором, находящимся в соответствующем элементе входного массива идентификаторов.
Выбрасывает:
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 отрицательно.
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 для всех активных потоков платформы.
Выбрасывает:
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 отрицательно.
UnsupportedOperationException —
  • если lockedMonitors имеет значение true, но виртуальная машина Java не поддерживает мониторинг использования мониторов объектов; или
  • если lockedSynchronizers имеет значение true, но виртуальная машина Java не поддерживает мониторинг использования синхронизаторов с владением.
С момента версии:
10
См. также:
  • isObjectMonitorUsageSupported()
  • isSynchronizerUsageSupported()

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, общие сведения, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.management/java/lang/management/ThreadMXBean.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API