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

Возвращает ObjectReference для монитора, если таковой имеется, на котором в данный момент ожидает этот поток.

void forceEarlyReturn​(Value value)

Принудительно заставляет метод вернуть значение до того, как он достигнет оператора возврата.

StackFrame frame​(int index)

Возвращает StackFrame по указанному индексу в текущей стеке вызовов потока.

int frameCount()

Возвращает количество кадров стека в текущей стеке вызовов потока.

List<StackFrame> frames()

Возвращает список, содержащий каждый StackFrame в текущей стеке вызовов потока.

List<StackFrame> frames​(int start, int length)

Возвращает список, содержащий диапазон StackFrame из текущей стеки вызовов потока.

void interrupt()

Прерывает этот поток, если поток не приостановлен отладчиком.

boolean isAtBreakpoint()

Определяет, приостановлен ли поток на точке останова.

boolean isSuspended()

Определяет, приостановлен ли поток отладчиком.

String name()

Возвращает имя этого потока.

List<ObjectReference> ownedMonitors()

Возвращает список, содержащий ObjectReference для каждого монитора, принадлежащего потоку.

List<MonitorInfo> ownedMonitorsAndFrames()

Возвращает список, содержащий объект MonitorInfo для каждого монитора, принадлежащего потоку.

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

Spec-Zone .ru
спецификации, руководства, описания, API