Spec-Zone.ru › OpenJDK 8

Интерфейс 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)

Возвращает информацию о каждом потоке, идентификатор которого находится в входном массиве ids, без трассировки стека.

ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers)

Возвращает информацию о каждом потоке, идентификатор которого находится в входном массиве ids, с трассировкой стека и информацией о синхронизации.

ThreadInfo[] getThreadInfo(long[] ids, int maxDepth)

Возвращает информацию о каждом потоке, идентификатор которого находится в входном массиве ids, с трассировкой стека заданного числа элементов трассировки.

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.

Spec-Zone.ru

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