-
- すべてのスーパー・インタフェース:
Mirror
,ObjectReference
,Value
public interface ThreadReference extends ObjectReference
ターゲットVMのスレッド・オブジェクトです。 ThreadReferenceは、ターゲットVMのスレッド固有の情報に追加アクセスできる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)
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()
デバッガによってスレッドが中断されているかどうかを判定します。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
-
-
-
-
フィールドの詳細
-
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()
と同様の危険があります。 中断されたスレッドが実行中の別のスレッドに必要なモニターを保持している場合、ターゲットVMでデッドロックが発生する可能性があります(少なくとも、中断されたスレッドが再開されるまでの間)。中断されたスレッドは、前述のJDI再開メソッドの1つを使って再開されるまで中断状態を維持することが保証されます。ターゲットVM内のアプリケーションが、中断したスレッドを
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
非同期の例外を使用してこのスレッドを停止します。 ターゲットVM内のデバッガ・スレッドは、指定されたThrowable
オブジェクトを使用してこのスレッドを停止します。- パラメータ:
throwable
- スローする非同期の例外。- 例外:
InvalidTypeException
-throwable
がターゲットVM内のjava.lang.Throwableのインスタンスでない場合。VMCannotBeModifiedException
- VirtualMachineが読取り専用の場合(VirtualMachine.canBeModified()
を参照)。- 関連項目:
Thread.stop(Throwable)
-
interrupt
void interrupt()
デバッガによってスレッドが中断されていない場合、このスレッドに割り込みます。- 例外:
VMCannotBeModifiedException
- VirtualMachineが読取り専用の場合(VirtualMachine.canBeModified()
を参照)。- 関連項目:
Thread.interrupt()
-
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 frame(int index) throws IncompatibleThreadStateException
スレッドの現在の呼出しスタック内の指定されたインデックスで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
がこのスレッドの呼出しスタック上に存在しない場合。NativeMethodException
- ポップされたフレームの中にネイティブ・メソッドのフレームが存在する場合、またはframeの1つ前のフレームがネイティブである場合。InvalidStackFrameException
- このframe
が無効になっている場合。 このスレッドがいったん再開されると、そのスタック・フレームは有効でなくなる。 フレームがこれ以上存在しない場合はこの例外もスローされる。VMCannotBeModifiedException
- VirtualMachineが読取り専用の場合(VirtualMachine.canBeModified()
を参照)。- 導入されたバージョン:
- 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
- このスレッドが中断されていない場合。NativeMethodException
- 復帰フレームがネイティブ・メソッドのフレームである場合。InvalidStackFrameException
- フレームが存在しない場合。InvalidTypeException
- 値の型がメソッドの戻り値の型に一致しない場合。ClassNotLoadedException
- メソッドの戻り値の型が適切なクラス・ローダーによってロードされていない場合。VMCannotBeModifiedException
- VirtualMachineが読取り専用の場合(VirtualMachine.canBeModified()
を参照)。- 導入されたバージョン:
- 1.6
-
-