Интерфейс 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() или JVM_Sleep() |
static final int |
THREAD_STATUS_UNKNOWN |
Состояние потока неизвестно |
static final int |
THREAD_STATUS_WAIT |
Поток ожидает - был вызван Object.wait() или JVM_MonitorWait() |
static final int |
THREAD_STATUS_ZOMBIE |
Поток завершил выполнение |
Поля, объявленные в интерфейсе com.sun.jdi.ObjectReference
INVOKE_NONVIRTUAL, INVOKE_SINGLE_THREADED
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
ObjectReference |
currentContendedMonitor() |
Возвращает ObjectReference для монитора, если таковой имеется, на котором в данный момент ожидает этот поток. |
void |
forceEarlyReturn |
Принудительно заставляет метод вернуть значение до достижения оператора return. |
StackFrame |
frame |
Возвращает StackFrame с заданным индексом в текущей стеке вызовов потока. |
int |
frameCount() |
Возвращает количество кадров стека в текущей стеке вызовов потока. |
List<StackFrame> |
frames() |
Возвращает список, содержащий каждый StackFrame в текущей стеке вызовов потока. |
List<StackFrame> |
frames |
Возвращает список, содержащий диапазон StackFrame зеркальных отображений из текущей стеки вызовов потока. |
void |
interrupt() |
Прерывает этот поток, если поток не был приостановлен отладчиком. |
boolean |
isAtBreakpoint() |
Определяет, приостановлен ли поток на точке останова. |
boolean |
isSuspended() |
Определяет, был ли поток приостановлен отладчиком. |
String |
name() |
Возвращает имя этого потока. |
List<ObjectReference> |
ownedMonitors() |
Возвращает список, содержащий ObjectReference для каждого монитора, принадлежащего потоку. |
List<MonitorInfo> |
ownedMonitorsAndFrames() |
Возвращает список, содержащий объект MonitorInfo для каждого монитора, принадлежащего потоку. |
void |
popFrames |
Удаляет кадры стека. |
void |
resume() |
Возобновляет работу этого потока. |
int |
status() |
Возвращает состояние потока. |
void |
stop |
Останавливает этот поток с асинхронным исключением. |
void |
suspend() |
Приостанавливает этот поток. |
int |
suspendCount() |
Возвращает количество ожидающих приостановок для этого потока. |
ThreadGroupReference |
threadGroup() |
Возвращает группу потоков этого потока. |
Методы, объявленные в интерфейсе com.sun.jdi.Mirror
toString, virtualMachine
Методы, объявленные в интерфейсе com.sun.jdi.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
static final int THREAD_STATUS_SLEEPING
- См. также:
THREAD_STATUS_MONITOR
static final int THREAD_STATUS_MONITOR
- См. также:
THREAD_STATUS_WAIT
static final int THREAD_STATUS_WAIT
- См. также:
THREAD_STATUS_NOT_STARTED
static final int THREAD_STATUS_NOT_STARTED
- См. также:
Подробное описание методов
name
String name()
- Возвращает:
- строку, содержащую имя потока.
suspend
void suspend()
resume() или вместе с другими потоками с помощью VirtualMachine.resume(). В отличие от Thread.suspend(), приостановки виртуальной машины и отдельных потоков учитываются. Перед тем, как поток снова начнёт выполняться, он должен быть возобновлён (с помощью resume() или resume()) столько раз, сколько он был приостановлен.
Приостановка отдельных потоков с помощью этого метода имеет те же опасности, что и Thread.suspend(). Если приостановленный поток держит монитор, необходимый другому работающему потоку, возможна тупиковая ситуация в целевой виртуальной машине (по крайней мере, до тех пор, пока приостановленный поток не будет возобновлён снова).
Приостановленный поток гарантированно останется приостановленным до возобновления с помощью одного из методов возобновления JDI, упомянутых выше; приложение в целевой виртуальной машине не может возобновить приостановленный поток с помощью Thread.resume().
- Исключения:
-
VMCannotBeModifiedException- если VirtualMachine является только для чтения - см.VirtualMachine.canBeModified().
resume
void resume()
suspend() или с помощью VirtualMachine.suspend(), или из-за события SUSPEND_ALL или SUSPEND_EVENT_THREAD, вызов этого метода не оказывает никакого влияния. В противном случае количество ожидающих приостановок для этого потока уменьшается. Если оно уменьшится до 0, поток продолжит выполнение. Примечание: обычный способ возобновления после приостановки, связанной с событием, — с помощью EventSet.resume().- Исключения:
-
VMCannotBeModifiedException- если VirtualMachine является только для чтения - см.VirtualMachine.canBeModified().
suspendCount
int suspendCount()
suspend() для объяснения учтённых приостановок.- Возвращает:
- количество ожидающих приостановок как целое число
stop
void stop(ObjectReference throwable) throws InvalidTypeException
Throwable.- Параметры:
-
throwable- асинхронное исключение, которое нужно сгенерировать. - Исключения:
-
InvalidTypeException- еслиthrowableне является экземпляром java.lang.Throwable в целевой виртуальной машине. -
VMCannotBeModifiedException- если VirtualMachine является только для чтения - см.VirtualMachine.canBeModified().
interrupt
void interrupt()
- Исключения:
-
VMCannotBeModifiedException- если VirtualMachine является только для чтения - см.VirtualMachine.canBeModified(). - См. также:
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(). Метод status() может использоваться для различения первых двух случаев и третьего. Не все целевые виртуальные машины поддерживают эту операцию. Используйте 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не находится в стеке вызовов этого потока. -
NativeMethodException- если одна из рамок, которые должны быть удалены, является нативным методом или если рамка, предшествующая frame, является нативной. -
InvalidStackFrameException- еслиframeстала недопустимой. После возобновления работы этого потока стековая рамка больше недействительна. Это исключение также выбрасывается, если больше нет рамок. -
VMCannotBeModifiedException- если VirtualMachine только для чтения - см.VirtualMachine.canBeModified(). - С:
- 1.4
forceEarlyReturn
void forceEarlyReturn(Value value) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException
Метод, который будет возвращать значение досрочно, называется вызываемым методом. Вызываемый метод является текущим методом (как определено разделом "Фреймы" в спецификации Java Virtual Machine) для указанного потока в момент вызова этого метода.
Поток должен быть приостановлен. Возврат происходит при возобновлении выполнения кода языка программирования Java в этом потоке. Между вызовом этого метода и возобновлением потока состояние стека не определено.
Больше никаких инструкций в вызываемом методе не выполняются. В частности, блоки finally не выполняются. Примечание: это может привести к несогласованному состоянию в приложении.
Блокировка, полученная вызовом вызываемого метода (если это синхронизированный метод) и блокировки, полученные при входе в синхронизированные блоки в вызываемом методе, освобождаются. Примечание: это не относится к нативным блокировкам или блокировкам java.util.concurrent.locks.
События, такие как MethodExit, генерируются так же, как и при нормальном возврате.
Вызываемый метод должен быть не нативным методом языка программирования Java. Вынужденный возврат в потоке с одной рамкой в стеке приводит к завершению потока при возобновлении.
Аргумент value — это значение, которое должен вернуть метод. Если тип возврата метода void, то значение должно быть VoidValue. Значения объектов должны быть совместимы с типом возврата метода (Это подразумевает, что тип возврата метода должен быть загружен через загрузчик класса, содержащего класс). Примитивные значения должны быть либо совместимы с типом возврата метода, либо должны быть преобразуемы в тип переменной без потери информации. См. раздел JLS 5.2 для получения дополнительной информации о совместимости присваивания.
Не все целевые виртуальные машины поддерживают эту операцию. Используйте VirtualMachine.canForceEarlyReturn() для определения поддержки этой операции.
- Параметры:
-
value- значение, которое должен вернуть метод. - Исключения:
-
UnsupportedOperationException- если целевая виртуальная машина не поддерживает эту операцию - см.canForceEarlyReturn() -
IncompatibleThreadStateException- если этот поток не приостановлен. -
NativeMethodException- если рамка, из которой должен быть возвращён результат, является нативным методом. -
InvalidStackFrameException- если нет рамок. -
InvalidTypeException- если тип значения не соответствует типу возврата метода. -
ClassNotLoadedException- если тип возврата метода ещё не загружен через соответствующий загрузчик классов. -
VMCannotBeModifiedException- если VirtualMachine только для чтения - см.VirtualMachine.canBeModified(). - С:
- 1.6
© 1993, 2021, 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/17/docs/api/jdk.jdi/com/sun/jdi/ThreadReference.html