- すべてのスーパー・インタフェース:
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
を返します。void
forceEarlyReturn
(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
オブジェクトを含むリストを返します。void
popFrames
(StackFrame frame) スタック・フレームをポップします。void
resume()
このスレッドを再開します。int
status()
スレッドの状態を返します。void
stop
(ObjectReference throwable) 非同期の例外を使用してこのスレッドを停止します。void
suspend()
このスレッドを中断します。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
-