- すべてのスーパー・インタフェース:
Mirror,ObjectReference,Value
ObjectReferenceです。 - 導入されたバージョン:
- 1.3
-
フィールドのサマリー
フィールド修飾子と型フィールド説明static final intスレッドはJavaモニターを待機中です。static final intスレッドは開始されていません。static final intスレッドは実行可能です。static final intスレッドがスリープしています -Thread.sleep(long)。static final intスレッドの状態が不明です。static final intスレッドは待機中です -Object.wait()またはLockSupport.park()。static final intスレッドは実行を完了しました。インタフェースcom.sun.jdi.ObjectReferenceで宣言されているフィールド
INVOKE_NONVIRTUAL, INVOKE_SINGLE_THREADED -
メソッドのサマリー
修飾子と型メソッド説明このスレッドが現在モニターを待機している場合は、そのモニターのObjectReferenceを返します。voidforceEarlyReturn(Value value) return文に到達する前に強制的にメソッドを復帰させます。frame(int index) スレッドの現在の呼出しスタック内の指定されたインデックスでStackFrameを返します。intスレッドの現在の呼出しスタック内のスタック・フレーム数を返します。frames()スレッドの現在の呼出しスタック内にある各StackFrameを含むリストを返します。frames(int start, int length) スレッドの現在の呼出しスタックからのStackFrameミラーの範囲を含むリストを返します。voidデバッガによってスレッドが中断されていない場合、このスレッドに割り込みます。booleanスレッドがブレークポイントで中断しているかどうかを判定します。booleanデバッガによってスレッドが中断されているかどうかを判定します。default booleanスレッドが「仮想スレッド」の場合は、trueを返します。name()このスレッドの名前を返します。スレッドが所有する各モニターのObjectReferenceを含むリストを返します。スレッドが所有する各モニターのMonitorInfoオブジェクトを含むリストを返します。voidpopFrames(StackFrame frame) スタック・フレームをポップします。voidresume()このスレッドを再開します。intstatus()スレッドの状態を返します。voidstop(ObjectReference throwable) 非同期の例外を使用してこのスレッドを停止します。voidsuspend()このスレッドを中断します。intこのスレッドの保留状態の中断回数を返します。このスレッドのスレッド・グループを返します。インタフェース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
-
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
-
suspend
void suspend()このスレッドを中断します。 スレッドは、resume()を使用して再開するか、VirtualMachine.resume()を使用してほかのスレッドから再開できます。仮想マシンと個々のスレッドの両方の一時停止がカウントされます。 スレッドを再実行する前に、一時停止された回数と同じ回数、(
resume()またはVirtualMachine.resume())を再開する必要があります。このメソッドで単一スレッドを一時停止すると、本質的にデッドロックが発生しやすくなります。 中断されたスレッドが実行中の別のスレッドに必要なモニターを保持している場合、ターゲットVMでデッドロックが発生する可能性があります(少なくとも、中断されたスレッドが再開されるまでの間)。
上記のいずれかのJDI再開メソッドによって再開されるまで、中断されたスレッドは中断されたままであることが保証されます。
- 例外:
VMCannotBeModifiedException- VirtualMachineが読取り専用の場合- 関連項目:
-
resume
void resume()このスレッドを再開します。 このスレッドの中断の原因が、suspend()でもVirtualMachine.suspend()でもなく、SUSPEND_ALLイベントやSUSPEND_EVENT_THREADイベントでもない場合、このメソッドを呼び出しても何も起こりません。 それ以外の場合、このスレッドについて保留中の中断のカウントが減少します。 カウントが0まで減少すると、スレッドは実行を継続します。 ノート: 中断の原因イベントからスレッドを再開するには、通常、EventSet.resume()を使用します。- 例外:
VMCannotBeModifiedException- VirtualMachineが読取り専用の場合- 関連項目:
-
suspendCount
-
stop
void stop(ObjectReference throwable) throws InvalidTypeException 非同期の例外を使用してこのスレッドを停止します。 ターゲットVM内のデバッガ・スレッドは、指定されたThrowableオブジェクトを使用してこのスレッドを停止します。このメソッドは、イベントで一時停止されている仮想スレッドに非同期例外を送信するために使用できます。 実装では、中断された仮想スレッドへの非同期例外の送信がサポートされている場合があります。
- パラメータ:
throwable- スローする非同期の例外- 例外:
InvalidTypeException-throwableがターゲットVM内のjava.lang.Throwableのインスタンスでない場合IllegalThreadStateException- スレッドが終了した場合、またはスレッドが仮想スレッドで一時停止されなかった場合OpaqueFrameException- スレッドが一時停止されている仮想スレッドで、実装がスレッドの現在のフレームから非同期例外をスローできなかった場合VMCannotBeModifiedException- VirtualMachineが読取り専用の場合- 関連項目:
-
interrupt
void interrupt()デバッガによってスレッドが中断されていない場合、このスレッドに割り込みます。- 例外:
VMCannotBeModifiedException- VirtualMachineが読取り専用の場合- 関連項目:
-
status
int status()スレッドの状態を返します。 スレッドが中断していない場合は、スレッドの現在の状態を返します。 スレッドが中断している場合は、中断前のスレッドの状態を返します。この情報を取得できない場合は、THREAD_STATUS_UNKNOWNを返します。スレッドが中断しているかどうかを確認するには、isSuspended()を使用します。 -
isSuspended
boolean isSuspended()デバッガによってスレッドが中断されているかどうかを判定します。- 戻り値:
- スレッドが現在中断している場合は
true、それ以外の場合はfalse。
-
isAtBreakpoint
boolean isAtBreakpoint()スレッドがブレークポイントで中断しているかどうかを判定します。- 戻り値:
- スレッドがブレークポイントで現在停止している場合は
true、それ以外の場合はfalse。
-
threadGroup
ThreadGroupReference threadGroup()このスレッドのスレッド・グループを返します。- 戻り値:
- ターゲットVM内のこのスレッドのスレッド・グループをミラー化する
ThreadGroupReference。
-
frameCount
int frameCount() throws IncompatibleThreadStateExceptionスレッドの現在の呼出しスタック内のスタック・フレーム数を返します。 この情報を取得するには、スレッドを中断する必要があります(通常はVMへの割り込みによって)。この情報は、スレッドが再開されると無効になります。- 戻り値:
- フレームのカウントを表す整数
- 例外:
IncompatibleThreadStateException- ターゲットVM内でスレッドが中断されていない場合
-
frames
List<StackFrame> frames() throws IncompatibleThreadStateExceptionスレッドの現在の呼出しスタック内にある各StackFrameを含むリストを返します。 この情報を取得するには、スレッドを中断する必要があります(通常はVMへの割り込みによって)。この情報は、スレッドが再開されると無効になります。- 戻り値:
- 現在のフレームの次に呼出し側の各フレームが続く
StackFrameのリスト。 - 例外:
IncompatibleThreadStateException- ターゲットVM内でスレッドが中断されていない場合
-
frame
スレッドの現在の呼出しスタック内の指定されたインデックスでStackFrameを返します。 インデックス0の場合は現在のフレームを取得し、0より大きいインデックスの場合は、呼出し側のフレームを示します。 この情報を取得するには、スレッドを中断する必要があります(通常はVMへの割り込みによって)。この情報は、スレッドが再開されると無効になります。- パラメータ:
index- 目的のフレーム- 戻り値:
- 要求された
StackFrame。 - 例外:
IncompatibleThreadStateException- ターゲットVM内でスレッドが中断されていない場合IndexOutOfBoundsException- インデックスがframeCount()以上の場合、または負の場合。
-
frames
List<StackFrame> frames(int start, int length) throws IncompatibleThreadStateException スレッドの現在の呼出しスタックからのStackFrameミラーの範囲を含むリストを返します。 この情報を取得するには、スレッドを中断する必要があります(通常はVMへの割り込みによって)。この情報は、スレッドが再開されると無効になります。- パラメータ:
start- 取得する最初のフレームのインデックス。 インデックス0は現在のフレームを表す。length- 取得するフレーム数- 戻り値:
- 現在のフレームの次に呼出し側の各フレームが続く
StackFrameのリスト。 - 例外:
IncompatibleThreadStateException- ターゲットVM内でスレッドが中断されていない場合IndexOutOfBoundsException- 指定された範囲がスタック・フレーム索引の範囲内にない場合。 つまり、次のどれかがtrueである場合に例外がスローされるstart < 0 start >=frameCount()length < 0 (start+length) >frameCount()
-
ownedMonitors
List<ObjectReference> ownedMonitors() throws IncompatibleThreadStateExceptionスレッドが所有する各モニターのObjectReferenceを含むリストを返します。 モニターは、(同期ステートメントまたは同期メソッドへのエントリを介して)と入力され、Object.wait()で放棄されていない場合、スレッドによって所有されます。この操作は、ターゲット仮想マシンでサポートされていないことがあります。 この操作がサポートされているかどうかを確認するには、
VirtualMachine.canGetOwnedMonitorInfo()を使用します。- 戻り値:
ObjectReferenceオブジェクトのリスト。 このスレッドによってモニターが所有されていない場合は、このリストの長さはゼロになる。- 例外:
UnsupportedOperationException- ターゲット仮想マシンがこの操作をサポートしていない場合。IncompatibleThreadStateException- ターゲットVM内でスレッドが中断されていない場合
-
ownedMonitorsAndFrames
List<MonitorInfo> ownedMonitorsAndFrames() throws IncompatibleThreadStateExceptionスレッドが所有する各モニターのMonitorInfoオブジェクトを含むリストを返します。 モニターは、(同期ステートメントまたは同期メソッドへのエントリを介して)と入力され、Object.wait()で放棄されていない場合、スレッドによって所有されます。この操作は、ターゲット仮想マシンでサポートされていないことがあります。 この操作がサポートされているかどうかを確認するには、
VirtualMachine.canGetMonitorFrameInfo()を使用します。- 戻り値:
MonitorInfoオブジェクトのリスト。 このスレッドによってモニターが所有されていない場合は、このリストの長さはゼロになる。- 例外:
UnsupportedOperationException- ターゲット仮想マシンがこの操作をサポートしていない場合。IncompatibleThreadStateException- ターゲットVM内でスレッドが中断されていない場合- 導入されたバージョン:
- 1.6
-
currentContendedMonitor
ObjectReference currentContendedMonitor() throws IncompatibleThreadStateExceptionこのスレッドが現在モニターを待機している場合は、そのモニターのObjectReferenceを返します。 スレッドは、同期されたメソッド、同期された文またはObject.wait()へのエントリを介してモニターを待機できます。 最初の2つの場合と最後の1つの場合を識別するには、status()メソッドを使用します。この操作は、ターゲット仮想マシンでサポートされていないことがあります。 この操作がサポートされているかどうかを確認するには、
VirtualMachine.canGetCurrentContendedMonitor()を使用します。- 戻り値:
- 競合するモニターに対応する
ObjectReference。スレッドがモニターを待機していない場合はnull。 - 例外:
UnsupportedOperationException- ターゲット仮想マシンがこの操作をサポートしていない場合。IncompatibleThreadStateException- ターゲットVM内でスレッドが中断されていない場合
-
popFrames
void popFrames(StackFrame frame) throws IncompatibleThreadStateException スタック・フレームをポップします。パラメータ
frameに指定されたフレームとそれまでのすべてのフレームが、スタックからポップされます。frameパラメータの1つ前のフレームが、現在のフレームになります。この操作が終了すると、このスレッドは
frameを作成したターゲット・メソッドの呼出し命令で中断状態になります。 この呼出し命令に移動すれば、frameのメソッドを再実行することができます。オペランド・スタックは復元されますが、前回のメソッド呼出し時に実行された引数に対する変更は取り消されません。 たとえば、次のような
fooメソッドを考えます。void foo(int x) { System.out.println("Foo: " + x); x = 4; System.out.println("pop here"); }このメソッドをfoo(7)として呼び出したあと、fooを2番目のprintlnの位置でポップして再開した場合、「Foo: 4」と出力されます。ポップされたフレームに対するロックは、ポップ時に解放されます。 これは、ポップされた同期化メソッドや、その中の同期化ブロックにも当てはまります。
最終的に、ブロックは実行されません。
このメソッド呼出しによって、このスレッドの実行ポイントとロック以外の状態が変わることはありません。 具体的には、フィールドの値やI/Oストリームなどの外部リソースの状態が変わることはありません。 ただし、ターゲット・プログラムの状態が、通常のプログラム・フローではあり得ない状態になる場合があります。たとえば、ロックの取得順序に混乱をきたすことが考えられます。 このため、ターゲット・プログラムが予期しない動作をする可能性があります。
このスレッドは一時停止されなければなりません。
このスレッドの
StackFrameオブジェクトはすべて無効です。このメソッドは、イベントで一時停止されている仮想スレッドのフレームをポップするために使用できます。 実装では、中断された仮想スレッドのフレームのポップがサポートされる場合があります。
このメソッドによって生成されるイベントはありません。
frameの呼出し側のフレームとそれまでのフレームはどれも、ネイティブであってはいけません。
この操作は、ターゲット仮想マシンでサポートされていないことがあります。 この操作がサポートされているかどうかを確認するには、
VirtualMachine.canPopFrames()を使用します。- パラメータ:
frame- ポップするスタック・フレーム。frameはこのスレッドの呼出しスタック上に存在する必要がある。- 例外:
UnsupportedOperationException- ターゲット仮想マシンでこの操作がサポートされていない場合。VirtualMachine.canPopFrames()を参照。IncompatibleThreadStateException- このスレッドが中断されていない場合。IllegalArgumentException-frameがこのスレッドの呼出しスタック上に存在しない場合。OpaqueFrameException- このスレッドが中断されている仮想スレッドで、ターゲットVMがフレームをポップできなかった場合。NativeMethodException- ポップされたフレームの中にネイティブ・メソッドのフレームが存在する場合、またはframeの1つ前のフレームがネイティブである場合。InvalidStackFrameException- このframeが無効になっている場合。 このスレッドがいったん再開されると、そのスタック・フレームは有効でなくなる。 フレームがこれ以上存在しない場合はこの例外もスローされる。VMCannotBeModifiedException- VirtualMachineが読取り専用の場合。- 導入されたバージョン:
- 1.4
- 関連項目:
-
forceEarlyReturn
void forceEarlyReturn(Value value) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException return文に到達する前に強制的にメソッドを復帰させます。早期復帰するメソッドを「被呼出しメソッド」と呼びます。 被呼出しメソッドは、「Java仮想マシン仕様」の「Frames」のセクションに定義されているとおり、このメソッドの呼出し時に、指定されたスレッドの現在のメソッドになります。
スレッドは中断される必要があります。 メソッドの復帰は、Javaプログラミング言語のコードの実行がこのスレッド上で再開されたときに行われます。 このメソッドを呼び出してからスレッドの実行が再開される前の間のスタックの状態は未定義です。
このメソッドは、仮想スレッドがイベントで一時停止されたときに、仮想スレッドの現在のフレームから強制的にリターンするために使用できます。 実装では、中断された仮想スレッドの現在のフレームから強制的に戻すことがサポートされている場合があります。
被呼出しメソッドでは、これ以上の命令は実行されません。 特に、最終的にブロックは実行されません。 ノート: これにより、アプリケーション内で整合性のない状態が発生することがあります。
被呼出しメソッドを呼び出すことによって獲得されたロック(これがsynchronizedメソッドの場合)と、被呼出しメソッド内のsynchronizedブロックに入ることによって獲得されたロックは解除されます。 ノート: これは、ネイティブ・ロックやjava.util.concurrent.locksロックには適用されません。
通常復帰の場合と同様に、MethodExitなどのイベントが生成されます。
被呼出しメソッドは、非ネイティブのJavaプログラミング言語のメソッドとします。 スタック上にフレームが1つだけある状態でスレッドへの強制復帰を行なった場合、スレッドが再開時に終了します。
引数
valueには、メソッドが復帰する値を指定します。 メソッドの戻り値の型がvoidである場合は、この値をVoidValueにします。 オブジェクトの値は、このメソッドの戻り値の型への代入互換性を持たなければいけません。これは、このメソッドの戻り値の型を、囲むクラスのクラス・ローダーによってロードする必要があることを意味します。 プリミティブ値は、このメソッドの戻り値の型への代入互換性を持たなければいけません。つまり、情報を失わずにこの変数型に変換できる必要があります。 代入互換性の詳細は、JLSのセクション5.2を参照してください。この操作は、ターゲット仮想マシンでサポートされていないことがあります。 この操作がサポートされているかどうかを確認するには、
VirtualMachine.canForceEarlyReturn()を使用します。- パラメータ:
value- メソッドが復帰する値。- 例外:
UnsupportedOperationException- ターゲット仮想マシンがこの操作をサポートしていない場合(次を参照)。canForceEarlyReturn()IncompatibleThreadStateException- このスレッドが中断されていない場合。OpaqueFrameException- このスレッドが中断されている仮想スレッドで、ターゲットVMがメソッドを強制的に返せない場合。NativeMethodException- 復帰フレームがネイティブ・メソッドのフレームである場合。InvalidStackFrameException- フレームが存在しない場合。InvalidTypeException- 値の型がメソッドの戻り値の型に一致しない場合。ClassNotLoadedException- メソッドの戻り値の型が適切なクラス・ローダーによってロードされていない場合。VMCannotBeModifiedException- VirtualMachineが読取り専用の場合。- 導入されたバージョン:
- 1.6
- 関連項目:
-
isVirtual
default boolean isVirtual()スレッドが「仮想スレッド」の場合は、trueを返します。- 実装要件:
- デフォルト実装は
UnsupportedOperationExceptionをスローします。 - 戻り値:
- スレッドが仮想スレッドの場合はtrue
- 導入されたバージョン:
- 21
-