Интерфейс ThreadReference
- Все суперинтерфейсы:
-
Mirror,ObjectReference,Value
public interface ThreadReference extends ObjectReference
Объект потока из целевой виртуальной машины. ThreadReference — это ObjectReference с дополнительным доступом к информации о потоке из целевой виртуальной машины.
- С момента:
- 1.3
Поля
| Модификатор и тип | Поле | Описание |
|---|---|---|
static int | THREAD_STATUS_MONITOR | Поток ожидает на java мониторе |
static int | THREAD_STATUS_NOT_STARTED | Поток еще не запущен |
static int | THREAD_STATUS_RUNNING | Поток готов к выполнению |
static int | THREAD_STATUS_SLEEPING | Поток спит — был вызван Thread.sleep() или JVM_Sleep() |
static int | THREAD_STATUS_UNKNOWN | Статус потока неизвестен |
static int | THREAD_STATUS_WAIT | Поток ожидает — был вызван Object.wait() или JVM_MonitorWait() |
static int | THREAD_STATUS_ZOMBIE | Поток завершил выполнение |
Поля, объявленные в интерфейсе com.sun.jdi.ObjectReference
INVOKE_NONVIRTUAL, INVOKE_SINGLE_THREADED Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
ObjectReference | currentContendedMonitor() | Возвращает |
void | forceEarlyReturn(Value value) | Принудительно заставляет метод вернуть значение до того, как он достигнет оператора возврата. |
StackFrame | frame(int index) | Возвращает |
int | frameCount() | Возвращает количество кадров стека в текущей стеке вызовов потока. |
List<StackFrame> | frames() | Возвращает список, содержащий каждый |
List<StackFrame> | frames(int start,
int length) | Возвращает список, содержащий диапазон |
void | interrupt() | Прерывает этот поток, если поток не приостановлен отладчиком. |
boolean | isAtBreakpoint() | Определяет, приостановлен ли поток на точке останова. |
boolean | isSuspended() | Определяет, приостановлен ли поток отладчиком. |
String | name() | Возвращает имя этого потока. |
List<ObjectReference> | ownedMonitors() | Возвращает список, содержащий |
List<MonitorInfo> | ownedMonitorsAndFrames() | Возвращает список, содержащий объект |
void | popFrames(StackFrame frame) | Удалить кадры стека. |
void | resume() | Возобновляет этот поток. |
int | status() | Возвращает статус потока. |
void | stop(ObjectReference throwable) | Останавливает этот поток с асинхронным исключением. |
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 Методы, объявленные в интерфейсе com.sun.jdi.Value
type Поля
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.sleep() или JVM_Sleep()
- См. также:
- Постоянные значения полей
THREAD_STATUS_MONITOR
static final int THREAD_STATUS_MONITOR
Поток ожидает на java мониторе
- См. также:
- Постоянные значения полей
THREAD_STATUS_WAIT
static final int THREAD_STATUS_WAIT
Поток ожидает — был вызван Object.wait() или JVM_MonitorWait()
- См. также:
- Постоянные значения полей
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(). - См. также:
Thread.interrupt()
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()
Возвращает группу нитей этой нити.
- Возвращает:
- a
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, 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.
https://docs.oracle.com/en/java/javase/11/docs/api/jdk.jdi/com/sun/jdi/ThreadReference.html