Spec-Zone.ru › OpenJDK 25

Интерфейс ThreadReference

Все суперинтерфейсы:
Mirror, ObjectReference, Value
public interface ThreadReference extends ObjectReference
Объект потока из целевой виртуальной машины. ThreadReference — это 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(Value value)
Принудительно завершает метод до достижения оператора return.
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()
Определяет, был ли поток приостановлен отладчиком.
default boolean isVirtual()
Возвращает true, если поток является виртуальным потоком.
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()
Возвращает группу потоков, к которой принадлежит этот поток.

Методы, объявленные в интерфейсе Mirror

toString, virtualMachine

Методы, объявленные в интерфейсе ObjectReference

disableCollection, enableCollection, entryCount, equals, getValue, getValues, hashCode, invokeMethod, isCollected, owningThread, referenceType, referringObjects, setValue, uniqueID, waitingThreads

Методы, объявленные в интерфейсе 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(long).
См. также:
  • Значения константных полей

THREAD_STATUS_MONITOR

static final int THREAD_STATUS_MONITOR
Поток ожидает освобождения монитора Java
См. также:
  • Значения константных полей

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 доступна только для чтения
См. также:
  • 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 в целевой виртуальной машине
IllegalThreadStateException — если выполнение потока завершено или если поток является виртуальным и не был приостановлен
OpaqueFrameException — если поток является приостановленным виртуальным потоком и реализация не смогла выбросить асинхронное исключение из текущего кадра стека потока
VMCannotBeModifiedException — если VirtualMachine доступна только для чтения
См. также:
  • VirtualMachine.canBeModified()

interrupt

void interrupt()
Прерывает этот поток, если он не был приостановлен отладчиком.
Вызывает исключение:
VMCannotBeModifiedException — если VirtualMachine доступна только для чтения
См. также:
  • Thread.interrupt()
  • 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() после получения уведомления, прерывания или истечения времени ожидания.

Не все целевые виртуальные машины поддерживают эту операцию. Используйте 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
См. также:
  • VirtualMachine.canBeModified()

forceEarlyReturn

void forceEarlyReturn(Value value) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException
Принудительно завершает метод до достижения им инструкции return.

Метод, выполнение которого завершается досрочно, далее называется вызываемым методом. На момент вызова этого метода вызываемый метод является текущим методом указанного потока (в соответствии с определением в разделе «Кадры» спецификации виртуальной машины 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
См. также:
  • VirtualMachine.canBeModified()

isVirtual

default boolean isVirtual()
Возвращает true, если поток является виртуальным потоком.
Требования к реализации:
Реализация по умолчанию вызывает UnsupportedOperationException.
Возвращает:
true, если поток является виртуальным
С момента выпуска:
21

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, в том числе общие сведения, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

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