Интерфейс ThreadReference
- Все суперинтерфейсы:
Mirror, ObjectReference, Value
public interface ThreadReference extends ObjectReference
ObjectReference с дополнительным доступом к информации о потоке из целевой виртуальной машины.- С момента выпуска:
- 1.3
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
THREAD_STATUS_MONITOR |
Поток ожидает на мониторе Java |
static final int |
THREAD_STATUS_NOT_STARTED |
Поток ещё не запущен |
static final int |
THREAD_STATUS_RUNNING |
Поток готов к выполнению |
static final int |
THREAD_STATUS_SLEEPING |
Поток спит — Thread.sleep(long). |
static final int |
THREAD_STATUS_UNKNOWN |
Состояние потока неизвестно |
static final int |
THREAD_STATUS_WAIT |
Поток ожидает — Object.wait() или LockSupport.park(). |
static final int |
THREAD_STATUS_ZOMBIE |
Выполнение потока завершено |
Поля, объявленные в интерфейсе ObjectReference
INVOKE_NONVIRTUAL, INVOKE_SINGLE_THREADED
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
ObjectReference |
currentContendedMonitor() |
Возвращает ObjectReference монитора, если он есть, которого в данный момент ожидает этот поток. |
void |
forceEarlyReturn |
Принудительно завершает метод до достижения оператора return. |
StackFrame |
frame |
Возвращает StackFrame с указанным индексом в текущем стеке вызовов потока. |
int |
frameCount() |
Возвращает количество кадров стека в текущем стеке вызовов потока. |
List |
frames() |
Возвращает список, содержащий каждый StackFrame в текущем стеке вызовов потока. |
List |
frames |
Возвращает список, содержащий диапазон зеркал StackFrame из текущего стека вызовов потока. |
void |
interrupt() |
Прерывает этот поток, если только он не приостановлен отладчиком. |
boolean |
isAtBreakpoint() |
Определяет, приостановлен ли поток на точке останова. |
boolean |
isSuspended() |
Определяет, был ли поток приостановлен отладчиком. |
default boolean |
isVirtual() |
Возвращает true, если поток является виртуальным потоком. |
String |
name() |
Возвращает имя этого потока. |
List |
ownedMonitors() |
Возвращает список, содержащий ObjectReference для каждого монитора, принадлежащего потоку. |
List |
ownedMonitorsAndFrames() |
Возвращает список, содержащий объект MonitorInfo для каждого монитора, принадлежащего потоку. |
void |
popFrames |
Удаляет кадры стека. |
void |
resume() |
Возобновляет выполнение этого потока. |
int |
status() |
Возвращает состояние потока. |
void |
stop |
Останавливает этот поток асинхронным исключением. |
void |
suspend() |
Приостанавливает этот поток. |
int |
suspendCount() |
Возвращает количество ожидающих приостановок этого потока. |
ThreadGroupReference |
threadGroup() |
Возвращает группу потоков, к которой принадлежит этот поток. |
Методы, объявленные в интерфейсе Mirror
toString, virtualMachine
Методы, объявленные в интерфейсе ObjectReference
disableCollection, enableCollection, entryCount, equals, getValue, getValues, hashCode, invokeMethod, isCollected, owningThread, referenceType, referringObjects, setValue, uniqueID, waitingThreads
Подробное описание полей
THREAD_STATUS_UNKNOWN
static final int THREAD_STATUS_UNKNOWN
- См. также:
THREAD_STATUS_ZOMBIE
static final int THREAD_STATUS_ZOMBIE
- См. также:
THREAD_STATUS_RUNNING
static final int THREAD_STATUS_RUNNING
- См. также:
THREAD_STATUS_SLEEPING
THREAD_STATUS_MONITOR
static final int THREAD_STATUS_MONITOR
- См. также:
THREAD_STATUS_WAIT
static final int THREAD_STATUS_WAIT
Object.wait() или LockSupport.park(). Виртуальный поток, который спит в Thread.sleep(long), может иметь этот статус вместо THREAD_STATUS_SLEEPING.- См. также:
THREAD_STATUS_NOT_STARTED
static final int THREAD_STATUS_NOT_STARTED
- См. также:
Подробное описание методов
name
String name()
- Возвращает:
- строку, содержащую имя потока.
suspend
void suspend()
resume() или вместе с другими потоками с помощью VirtualMachine.resume(). Приостановки виртуальной машины и отдельных потоков учитываются. Чтобы поток снова начал выполняться, его необходимо возобновить (с помощью resume() или VirtualMachine.resume()) столько же раз, сколько он был приостановлен.
Приостановка отдельных потоков этим методом по своей природе чревата взаимной блокировкой. Если приостановленный поток удерживает монитор, необходимый другому выполняющемуся потоку, в целевой виртуальной машине может возникнуть взаимная блокировка (по крайней мере до тех пор, пока выполнение приостановленного потока не будет возобновлено).
Гарантируется, что приостановленный поток останется приостановленным до тех пор, пока его выполнение не будет возобновлено одним из упомянутых выше методов возобновления JDI.
- Вызывает исключение:
-
VMCannotBeModifiedException— если VirtualMachine доступна только для чтения - См. также:
resume
void resume()
suspend() или VirtualMachine.suspend(), а также не был приостановлен событием SUSPEND_ALL или SUSPEND_EVENT_THREAD, вызов этого метода не оказывает никакого эффекта. В противном случае счетчик ожидающих приостановок этого потока уменьшается. Если он уменьшается до 0, поток продолжает выполнение. Примечание: обычный способ возобновить выполнение после приостановки, связанной с событием, — использовать EventSet.resume().- Вызывает исключение:
-
VMCannotBeModifiedException— если VirtualMachine доступна только для чтения - См. также:
suspendCount
int suspendCount()
suspend().- Возвращает:
- количество ожидающих приостановок в виде целого числа
stop
void stop(ObjectReference throwable) throws InvalidTypeException
Throwable. Этот метод можно использовать для отправки асинхронного исключения виртуальному потоку, приостановленному на событии. Реализация может поддерживать отправку асинхронного исключения приостановленному виртуальному потоку и в других случаях.
- Параметры:
-
throwable— асинхронное исключение, которое нужно выбросить - Вызывает исключение:
-
InvalidTypeException— еслиthrowableне является экземпляром java.lang.Throwable в целевой виртуальной машине -
IllegalThreadStateException— если выполнение потока завершено или если поток является виртуальным и не был приостановлен -
OpaqueFrameException— если поток является приостановленным виртуальным потоком и реализация не смогла выбросить асинхронное исключение из текущего кадра стека потока -
VMCannotBeModifiedException— если VirtualMachine доступна только для чтения - См. также:
interrupt
void interrupt()
- Вызывает исключение:
-
VMCannotBeModifiedException— если VirtualMachine доступна только для чтения - См. также:
status
int status()
THREAD_STATUS_UNKNOWN, если эти сведения недоступны. С помощью isSuspended() можно определить, был ли поток приостановлен.- Возвращает:
- одно из значений
THREAD_STATUS_UNKNOWN,THREAD_STATUS_ZOMBIE,THREAD_STATUS_RUNNING,THREAD_STATUS_SLEEPING,THREAD_STATUS_MONITOR,THREAD_STATUS_WAIT,THREAD_STATUS_NOT_STARTED,
isSuspended
boolean isSuspended()
- Возвращает:
-
true, если поток в данный момент приостановлен; в противном случае —false.
isAtBreakpoint
boolean isAtBreakpoint()
- Возвращает:
-
true, если поток в данный момент остановлен на точке останова; в противном случае —false.
threadGroup
ThreadGroupReference threadGroup()
- Возвращает:
- объект
ThreadGroupReference, представляющий группу этого потока в целевой виртуальной машине.
frameCount
int frameCount() throws IncompatibleThreadStateException
- Возвращает:
- количество кадров в виде целого числа
- Вызывает исключение:
-
IncompatibleThreadStateException— если поток не приостановлен в целевой виртуальной машине
frames
List<StackFrame> frames() throws IncompatibleThreadStateException
StackFrame в текущем стеке вызовов потока. Чтобы получить эти сведения, поток должен быть приостановлен (обычно в результате прерывания работы виртуальной машины); они действительны только до возобновления выполнения потока.- Возвращает:
- список объектов
StackFrame, в котором сначала указан текущий кадр, а затем кадры вызывающих методов. - Вызывает исключение:
-
IncompatibleThreadStateException— если поток не приостановлен в целевой виртуальной машине
frame
StackFrame frame(int index) throws IncompatibleThreadStateException
StackFrame с указанным индексом в текущем стеке вызовов потока. Индекс 0 соответствует текущему кадру; большие индексы соответствуют кадрам вызывающих методов. Чтобы получить эти сведения, поток должен быть приостановлен (обычно в результате прерывания работы виртуальной машины); они действительны только до возобновления выполнения потока.- Параметры:
-
index— требуемый кадр - Возвращает:
- запрошенный объект
StackFrame - Вызывает исключение:
-
IncompatibleThreadStateException— если поток не приостановлен в целевой виртуальной машине -
IndexOutOfBoundsException— если индекс больше или равенframeCount()либо является отрицательным.
frames
List<StackFrame> frames(int start, int length) throws IncompatibleThreadStateException
StackFrame, представляющих кадры текущего стека вызовов потока. Чтобы получить эти сведения, поток должен быть приостановлен (обычно в результате прерывания работы виртуальной машины); они действительны только до возобновления выполнения потока.- Параметры:
-
start— индекс первого кадра для получения. Индекс 0 соответствует текущему кадру. -
length— количество кадров для получения - Возвращает:
- список объектов
StackFrame, в котором сначала указан текущий кадр, а затем кадры вызывающих методов. - Вызывает исключение:
-
IncompatibleThreadStateException— если поток не приостановлен в целевой виртуальной машине -
IndexOutOfBoundsException— если указанный диапазон не входит в диапазон индексов кадров стека. То есть исключение вызывается, если выполняется любое из следующих условий:start < 0 start >=
frameCount()length < 0 (start+length) >frameCount()
ownedMonitors
List<ObjectReference> ownedMonitors() throws IncompatibleThreadStateException
ObjectReference для каждого монитора, принадлежащего потоку. Монитор принадлежит потоку, если поток захватил его (с помощью оператора synchronized или входа в синхронизированный метод) и не освободил с помощью Object.wait(). Не все целевые виртуальные машины поддерживают эту операцию. Используйте VirtualMachine.canGetOwnedMonitorInfo(), чтобы определить, поддерживается ли операция.
- Возвращает:
- список объектов
ObjectReference. Если поток не владеет ни одним монитором, список имеет нулевую длину. - Вызывает исключение:
-
UnsupportedOperationException— если целевая виртуальная машина не поддерживает эту операцию. -
IncompatibleThreadStateException— если поток не приостановлен в целевой виртуальной машине
ownedMonitorsAndFrames
List<MonitorInfo> ownedMonitorsAndFrames() throws IncompatibleThreadStateException
MonitorInfo для каждого монитора, принадлежащего потоку. Монитор принадлежит потоку, если поток захватил его (с помощью оператора synchronized или входа в синхронизированный метод) и не освободил с помощью Object.wait(). Не все целевые виртуальные машины поддерживают эту операцию. Используйте VirtualMachine.canGetMonitorFrameInfo(), чтобы определить, поддерживается ли операция.
- Возвращает:
- список объектов
MonitorInfo. Если поток не владеет ни одним монитором, список имеет нулевую длину. - Вызывает исключение:
-
UnsupportedOperationException— если целевая виртуальная машина не поддерживает эту операцию. -
IncompatibleThreadStateException— если поток не приостановлен в целевой виртуальной машине - С момента выпуска:
- 1.6
currentContendedMonitor
ObjectReference currentContendedMonitor() throws IncompatibleThreadStateException
ObjectReference для монитора, если таковой имеется, освобождения которого в данный момент ожидает этот поток. Поток может ожидать монитор при входе в синхронизированный метод, при выполнении оператора synchronized или при ожидании повторного захвата монитора с помощью Object.wait() после получения уведомления, прерывания или истечения времени ожидания. Не все целевые виртуальные машины поддерживают эту операцию. Используйте VirtualMachine.canGetCurrentContendedMonitor(), чтобы определить, поддерживается ли операция.
- Возвращает:
- объект
ObjectReference, соответствующий монитору, освобождения которого ожидает поток, или null, если поток не ожидает монитор. - Вызывает исключение:
-
UnsupportedOperationException— если целевая виртуальная машина не поддерживает эту операцию. -
IncompatibleThreadStateException— если поток не приостановлен в целевой виртуальной машине
popFrames
void popFrames(StackFrame frame) throws IncompatibleThreadStateException
Все кадры вплоть до frame включительно удаляются из стека. Кадр, расположенный перед параметром frame, становится текущим.
После выполнения этой операции поток будет приостановлен на инструкции вызова целевого метода, создавшего frame. Повторно войти в метод frame можно, выполнив пошагово эту инструкцию.
Стек операндов восстанавливается, однако все изменения аргументов, произошедшие в вызванном методе, сохраняются. Например, если метод foo:
void foo(int x) {
System.out.println("Foo: " + x);
x = 4;
System.out.println("pop here");
}
был вызван с foo(7) и foo удаляется на втором println, после чего выполнение возобновляется, будет выведено: Foo: 4. Блокировки, полученные удаленным кадром, освобождаются при его удалении. Это относится к удаляемым синхронизированным методам и всем синхронизированным блокам внутри них.
Блоки finally не выполняются.
Этот вызов влияет только на точку выполнения потока и блокировки; остальные аспекты состояния не затрагиваются. В частности, значения полей не меняются, как и внешние ресурсы, например потоки ввода-вывода. Кроме того, целевая программа может оказаться в состоянии, невозможном при обычном ходе выполнения; например, может измениться порядок получения блокировок. Поэтому целевая программа может вести себя не так, как ожидает пользователь.
Этот поток должен быть приостановлен.
Все объекты StackFrame этого потока становятся недействительными.
Этот метод можно использовать для удаления кадров виртуального потока, приостановленного на событии. Реализация может поддерживать удаление кадров приостановленного виртуального потока и в других случаях.
Этот метод не генерирует событий.
Ни один кадр вплоть до кадра вызывающего метода для frame включительно не может быть нативным.
Не все целевые виртуальные машины поддерживают эту операцию. Используйте VirtualMachine.canPopFrames(), чтобы определить, поддерживается ли операция.
- Параметры:
-
frame— кадр стека для удаления.frameнаходится в стеке вызовов этого потока. - Вызывает исключение:
-
UnsupportedOperationException— если целевая виртуальная машина не поддерживает эту операцию; см.VirtualMachine.canPopFrames(). -
IncompatibleThreadStateException— если этот поток не приостановлен. -
IllegalArgumentException— еслиframeотсутствует в стеке вызовов этого потока. -
OpaqueFrameException— если этот поток является приостановленным виртуальным потоком и целевая виртуальная машина не смогла удалить кадры. -
NativeMethodException— если один из кадров, которые нужно удалить, принадлежит нативному методу или если кадр перед frame является нативным. -
InvalidStackFrameException— еслиframeстал недействительным. После возобновления выполнения этого потока кадр стека становится недействительным. Это исключение также вызывается, если кадров больше нет. -
VMCannotBeModifiedException— если VirtualMachine доступна только для чтения. - С момента выпуска:
- 1.4
- См. также:
forceEarlyReturn
void forceEarlyReturn(Value value) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException
Метод, выполнение которого завершается досрочно, далее называется вызываемым методом. На момент вызова этого метода вызываемый метод является текущим методом указанного потока (в соответствии с определением в разделе «Кадры» спецификации виртуальной машины Java).
Поток должен быть приостановлен. Возврат произойдет, когда выполнение кода на языке программирования Java в этом потоке будет возобновлено. Между вызовом этого метода и возобновлением выполнения потока состояние стека не определено.
Этот метод можно использовать для принудительного возврата из текущего кадра виртуального потока, приостановленного на событии. Реализация может поддерживать принудительный возврат из текущего кадра приостановленного виртуального потока и в других случаях.
В вызываемом методе не выполняются дальнейшие инструкции. В частности, блоки finally не выполняются. Примечание: это может привести к несогласованному состоянию приложения.
Блокировка, полученная при вызове вызываемого метода (если он является синхронизированным), и блокировки, полученные при входе в синхронизированные блоки внутри вызываемого метода, освобождаются. Примечание: это не относится к нативным блокировкам и блокировкам java.util.concurrent.locks.
События, например MethodExit, генерируются так же, как при обычном возврате.
Вызываемый метод должен быть методом на языке программирования Java, не являющимся нативным. Принудительный возврат из потока, в стеке которого находится только один кадр, приводит к завершению потока после возобновления его выполнения.
Аргумент value задает значение, которое должен вернуть метод. Если тип возвращаемого значения метода — void, value должен быть объектом VoidValue. Типы объектов должны быть совместимы по присваиванию с типом возвращаемого значения метода (это означает, что тип возвращаемого значения метода должен быть загружен загрузчиком классов внешнего класса). Примитивные значения должны быть совместимы по присваиванию с типом возвращаемого значения метода либо преобразуемы в тип переменной без потери информации. Дополнительные сведения о совместимости по присваиванию см. в разделе 5.2 JLS.
Не все целевые виртуальные машины поддерживают эту операцию. Используйте VirtualMachine.canForceEarlyReturn(), чтобы определить, поддерживается ли операция.
- Параметры:
-
value— значение, которое должен вернуть метод. - Вызывает исключение:
-
UnsupportedOperationException— если целевая виртуальная машина не поддерживает эту операцию; см.canForceEarlyReturn() -
IncompatibleThreadStateException— если этот поток не приостановлен. -
OpaqueFrameException— если этот поток является приостановленным виртуальным потоком и целевая виртуальная машина не может принудительно завершить метод. -
NativeMethodException— если кадр, из которого выполняется возврат, принадлежит нативному методу. -
InvalidStackFrameException— если кадров нет. -
InvalidTypeException— если тип значения не соответствует типу возвращаемого значения метода. -
ClassNotLoadedException— если тип возвращаемого значения метода еще не загружен соответствующим загрузчиком классов. -
VMCannotBeModifiedException— если VirtualMachine доступна только для чтения. - С момента выпуска:
- 1.6
- См. также:
isVirtual
default boolean isVirtual()
true, если поток является виртуальным потоком.- Требования к реализации:
- Реализация по умолчанию вызывает
UnsupportedOperationException. - Возвращает:
- true, если поток является виртуальным
- С момента выпуска:
- 21
© 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/jdk.jdi/com/sun/jdi/ThreadReference.html