Spec-Zone .ru
спецификации, руководства, описания, API
|
public interface ThreadReference extends ObjectReference
ObjectReference
с дополнительным доступом к специфичной для потока информации от целевого VM.Модификатор и Тип | Поле и Описание |
---|---|
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
Поток завершил выполнение
|
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()
Определяет, был ли поток приостановлен отладчик.
|
Строка |
name()
Возвращает имя этого потока.
|
List<ObjectReference> |
ownedMonitors()
Возвращает Список, содержащий
ObjectReference для каждого монитора, принадлежавшего потоку. |
List<MonitorInfo> |
ownedMonitorsAndFrames()
Возвращает Список, содержащий a
MonitorInfo объект для каждого монитора принадлежит потоку. |
void |
popFrames(StackFrame frame)
Вытолкайте стековые фреймы.
|
void |
resume()
Резюме этот поток.
|
int |
status()
Возвращает состояние потока.
|
void |
stop(ObjectReference throwable)
Остановки этот поток с асинхронным исключением.
|
void |
suspend()
Приостанавливает этот поток.
|
int |
suspendCount()
Возвращается число ожидания приостанавливает за этот поток.
|
ThreadGroupReference |
threadGroup()
Возвраты группа потока этого потока.
|
disableCollection, enableCollection, entryCount, equals, getValue, getValues, hashCode, invokeMethod, isCollected, owningThread, referenceType, referringObjects, setValue, uniqueID, waitingThreads
toString, virtualMachine
static final int THREAD_STATUS_UNKNOWN
static final int THREAD_STATUS_ZOMBIE
static final int THREAD_STATUS_RUNNING
static final int THREAD_STATUS_SLEEPING
static final int THREAD_STATUS_MONITOR
static final int THREAD_STATUS_WAIT
static final int THREAD_STATUS_NOT_STARTED
String name()
void suspend()
resume()
или возобновленный с другими потоками через VirtualMachine.resume()
. В отличие от этого Thread.suspend()
, приостанавливает и виртуальной машины и отдельных потоков, считаются. Прежде, чем поток будет работать снова, он должен быть возобновлен (через resume()
или resume()
) то же самое число раз это было приостановлено.
У приостановки единственных потоков с этим методом есть те же самые опасности как Thread.suspend()
. Если приостановленный поток содержит монитор, необходимый другому рабочему потоку, мертвая блокировка возможна в целевом VM (по крайней мере, пока приостановленный поток не возобновляется снова).
Приостановленный поток, как гарантируют, останется приостановленным пока не возобновлено через один из упомянутых выше методов резюме JDI; приложение в целевом VM не может возобновить приостановленный поток через Thread.resume()
.
VMCannotBeModifiedException
- если VirtualMachine только для чтения - см. VirtualMachine.canBeModified()
.void resume()
suspend()
или через VirtualMachine.suspend()
, или из-за события SUSPEND_ALL ИЛИ SUSPEND_EVENT_THREAD, затем вызывая этот метод не имеет никакого эффекта. Иначе, количество ожидания приостанавливает на этом потоке, постепенно уменьшается. Если это будет постепенно уменьшено к 0, то поток будет продолжать выполняться. Отметьте: нормальный способ возобновить от события связанную приостановку через EventSet.resume()
.VMCannotBeModifiedException
- если VirtualMachine только для чтения - см. VirtualMachine.canBeModified()
.int suspendCount()
suspend()
поскольку объяснение считаемых приостанавливает.void stop(ObjectReference throwable) throws InvalidTypeException
Throwable
объект.throwable
- асинхронное исключение, чтобы бросить.InvalidTypeException
- если throwable
не экземпляр java.lang. Throwable в целевом VM.VMCannotBeModifiedException
- если VirtualMachine только для чтения - см. VirtualMachine.canBeModified()
.Thread.stop(Throwable)
void interrupt()
VMCannotBeModifiedException
- если VirtualMachine только для чтения - см. VirtualMachine.canBeModified()
.Thread.interrupt()
int status()
THREAD_STATUS_UNKNOWN
если эта информация не доступна. isSuspended()
может использоваться, чтобы определить, был ли поток приостановлен.boolean isSuspended()
true
если поток в настоящий момент приостанавливается; false
иначе.boolean isAtBreakpoint()
true
если поток в настоящий момент останавливается в контрольной точке; false
иначе.ThreadGroupReference threadGroup()
ThreadGroupReference
это зеркально отражает группу потока этого потока в целевом VM.int frameCount() throws IncompatibleThreadStateException
IncompatibleThreadStateException
- если поток не приостанавливается в целевом VMList<StackFrame> frames() throws IncompatibleThreadStateException
StackFrame
в текущем стеке вызовов потока. Поток должен быть приостановлен (обычно посредством прерывания к VM), чтобы получить эту информацию, и это только допустимо, пока поток не возобновляется снова.StackFrame
с текущим фреймом, сначала сопровождаемым фреймом каждой вызывающей стороны.IncompatibleThreadStateException
- если поток не приостанавливается в целевом VMStackFrame frame(int index) throws IncompatibleThreadStateException
StackFrame
в данном индексируют в текущем стеке вызовов потока. Индексируйте 0, получает текущий фрейм; более высокие индексы получают фреймы вызывающей стороны. Поток должен быть приостановлен (обычно посредством прерывания к VM), чтобы получить эту информацию, и это только допустимо, пока поток не возобновляется снова.index
- требуемый фреймStackFrame
IncompatibleThreadStateException
- если поток не приостанавливается в целевом VMIndexOutOfBoundsException
- если индексирование больше чем или равно frameCount()
или отрицательно.List<StackFrame> frames(int start, int length) throws IncompatibleThreadStateException
StackFrame
зеркала от текущего стека вызовов потока. Поток должен быть приостановлен (обычно посредством прерывания к VM), чтобы получить эту информацию, и это только допустимо, пока поток не возобновляется снова.start
- индексирование первого фрейма, который получит. Индексируйте 0, представляет текущий фрейм.length
- число фреймов, чтобы получитьStackFrame
с текущим фреймом, сначала сопровождаемым фреймом каждой вызывающей стороны.IncompatibleThreadStateException
- если поток не приостанавливается в целевом VMIndexOutOfBoundsException
- если указанный диапазон не в пределах диапазона стекового фрейма indicies. Таким образом, исключение выдается, если какое-либо следующее является истиной: start < 0 start >=frameCount()
length < 0 (start+length) >frameCount()
List<ObjectReference> ownedMonitors() throws IncompatibleThreadStateException
ObjectReference
для каждого монитора, принадлежавшего потоку. Монитор принадлежит потоку, если он был введен (через синхронизируемый оператор или запись в синхронизируемый метод) и не был оставлен через Object.wait(long)
. Не все целевые виртуальные машины поддерживают эту работу. Использовать VirtualMachine.canGetOwnedMonitorInfo()
определить, поддерживается ли работа.
ObjectReference
объекты. У списка есть нулевая длина, если никакие мониторы не принадлежат этому потоку.UnsupportedOperationException
- если целевая виртуальная машина не поддерживает эту работу.IncompatibleThreadStateException
- если поток не приостанавливается в целевом VMList<MonitorInfo> ownedMonitorsAndFrames() throws IncompatibleThreadStateException
MonitorInfo
объект для каждого монитора принадлежит потоку. Монитор принадлежит потоку, если он был введен (через синхронизируемый оператор или запись в синхронизируемый метод) и не был оставлен через Object.wait(long)
. Не все целевые виртуальные машины поддерживают эту работу. Использовать VirtualMachine.canGetMonitorFrameInfo()
определить, поддерживается ли работа.
MonitorInfo
объекты. У списка есть нулевая длина, если никакие мониторы не принадлежат этому потоку.UnsupportedOperationException
- если целевая виртуальная машина не поддерживает эту работу.IncompatibleThreadStateException
- если поток не приостанавливается в целевом VMObjectReference currentContendedMonitor() throws IncompatibleThreadStateException
ObjectReference
для монитора, если таковые вообще имеются, которого этот поток в настоящий момент ожидает. Поток может ожидать монитора посредством записи в синхронизируемый метод, синхронизируемый оператор, или Object.wait(long)
. status()
метод может использоваться, чтобы дифференцироваться между первыми двумя случаями и третьим. Не все целевые виртуальные машины поддерживают эту работу. Использовать VirtualMachine.canGetCurrentContendedMonitor()
определить, поддерживается ли работа.
ObjectReference
соответствие монитору, с которым спорят, или нулю, если это не ожидает монитора.UnsupportedOperationException
- если целевая виртуальная машина не поддерживает эту работу.IncompatibleThreadStateException
- если поток не приостанавливается в целевом VMvoid popFrames(StackFrame frame) throws IncompatibleThreadStateException
Все фреймы до и включая frame
выталкиваются от стека. Фрейм до параметра frame
станет текущим фреймом.
После этой работы этот поток будет приостановлен в вызвать инструкции целевого метода, который создал frame
. frame
's метод может быть повторно введен с шагом в инструкцию.
Стек операнда восстанавливается, однако, любые изменения к параметрам, которые произошли в вызванном методе, остаться. Например, если метод foo
:
void foo(int x) { System.out.println("Foo: " + x); x = 4; System.out.println("pop here"); }с вызвали
foo(7)
и foo
выталкивается во втором println
и возобновленный, это напечатает: Foo: 4
. Блокировки, полученные вытолканным фреймом, выпускаются, когда он выталкивается. Это применяется к синхронизируемым методам, которые выталкиваются, и к любым синхронизируемым блокам в пределах них.
Наконец блоки не выполняются.
Ни на какой аспект состояния, кроме точки выполнения этого потока и блокировок, не влияет этот вызов. Определенно, значения полей неизменны, как внешние ресурсы, такие как потоки ввода-вывода. Дополнительно, целевая программа могла бы быть помещена в состояние, которое невозможно с нормальным процессом выполнения программы; например, порядок сбора блокировки мог бы быть встревожен. Таким образом целевая программа может продолжиться по-другому, чем пользователь ожидал бы.
Указанный поток должен быть приостановлен.
Все StackFrame
объекты для этого потока лишаются законной силы.
Никакие события не сгенерированы этим методом.
Ни один из фреймов через и включая фрейм для вызывающей стороны фрейма не может быть собственным.
Не все целевые виртуальные машины поддерживают эту работу. Использовать VirtualMachine.canPopFrames()
определить, поддерживается ли работа.
frame
- Стековый фрейм к населению frame
находится на стеке вызовов этого потока.UnsupportedOperationException
- если целевая виртуальная машина не поддерживает эту работу - см. VirtualMachine.canPopFrames()
.IncompatibleThreadStateException
- если этот поток не приостанавливается.IllegalArgumentException
- если frame
не находится на стеке вызовов этого потока.NativeMethodException
- если бы один из фреймов, которые были бы вытолканы, является одним собственного метода или если фрейм до фрейма является собственным.InvalidStackFrameException
- если frame
стал недопустимым. Как только этот поток возобновляется, стековый фрейм больше не действителен. Это исключение также выдается, если нет больше фреймов.VMCannotBeModifiedException
- если VirtualMachine только для чтения - см. VirtualMachine.canBeModified()
.void forceEarlyReturn(Value value) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException
Метод, который возвратится рано, упоминается как вызванный метод. Вызванный метод является текущим методом (как определено разделом Фреймов в Спецификации виртуальной машины Java) для указанного потока в то время, когда этот метод вызывают.
Поток должен быть приостановлен. Возврат происходит, когда выполнение кода языка программирования Java возобновляется на этом потоке. Между звонком в этот метод и возобновлением выполнения потока, состояние стека неопределено.
Никакие дальнейшие инструкции не выполняются в вызванном методе. Определенно, наконец блоки не выполняются. Отметьте: это может вызвать непоследовательные состояния в приложении.
Блокировка, полученная, вызывая вызванный метод (если это - синхронизируемый метод) и, блокирует полученный, входя, синхронизировался, блоки в пределах вызванного метода выпускаются. Отметьте: это не применяется к собственным блокировкам или блокировкам java.util.concurrent.locks.
События, такие как MethodExit, сгенерированы, как они были бы в нормальном возврате.
Вызванный метод должен быть несобственным методом языка программирования Java. Принуждение возврата на потоке только с одним фреймом на стеке заставляет поток выходить когда возобновлено.
value
параметром является значение, которое должен возвратить метод. Если тип возврата метода является пустым, то оцените, должен быть a VoidValue
. Объектные значения должны быть присвоением, совместимым с типом возврата метода (Это подразумевает, что тип возврата метода должен быть загружен через class включения загрузчик class). Примитивные значения должны быть или присвоением, совместимым с типом возврата метода, или должны быть конвертируемыми к типу переменной без потери информации. См. раздел JLS 5.2 для получения дополнительной информации о совместимости присвоения.
Не все целевые виртуальные машины поддерживают эту работу. Использовать VirtualMachine.canForceEarlyReturn()
определить, поддерживается ли работа.
value
- значение метод должно возвратиться.UnsupportedOperationException
- если целевая виртуальная машина не поддерживает эту работу - см. canForceEarlyReturn()
IncompatibleThreadStateException
- если этот поток не приостанавливается.NativeMethodException
- если фрейм, который будет возвращен из, является фреймом собственного метода.InvalidStackFrameException
- если нет никаких фреймов.InvalidTypeException
- если тип значения не соответствует тип возврата метода.ClassNotLoadedException
- если тип возврата метода еще не был загружен через соответствующий загрузчик class.VMCannotBeModifiedException
- если VirtualMachine только для чтения - см. VirtualMachine.canBeModified()
.
Авторское право © 1999, 2013, Oracle и/или его филиалы. Все права защищены.
ЧЕРНОВАЯ земля-b92