- すべての実装されたインタフェース:
Runnable
- 直系の既知のサブクラス:
ForkJoinWorkerThread
Threadは、スレッドを作成するためのコンストラクタおよびThread.BuilderPREVIEWを定義します。 「開始中」は、スレッドがrunメソッドを実行するようにスケジュールします。 新しく起動されたスレッドは、起動の原因となったスレッドと同時に実行されます。
スレッド「終了」は、そのrunメソッドが正常に完了した場合、またはそのrunメソッドが突然完了し、適切な「捕捉されない例外ハンドラ」が正常に完了または突然完了した場合です。 実行するコードが残っていないため、スレッドは実行を完了しました。 joinメソッドを使用すると、スレッドが終了するのを待機できます。
スレッドには、一意のidentifierおよびnameがあります。 識別子は、Threadの作成時に生成され、変更できません。 スレッド名は、スレッドの作成時に指定することも、後で「変更済」にすることもできます。
スレッドはThreadLocal変数をサポートします。 スレッドに対してローカルな変数です。つまり、スレッドは、他のスレッドによって設定された値とは無関係な値に設定された変数のコピーを持つことができます。 スレッドでは、親スレッドからのスレッド作成時に継承されるスレッド・ローカル変数であるInheritableThreadLocal変数もサポートされます。 スレッドは、スレッドcontext-class-loader特別な継承可能なスレッドをサポートします。
プラットフォーム・スレッド
Threadでは、通常、オペレーティング・システムによってスケジュールされたカーネル・スレッドに1:1でマップされる「プラットフォーム・スレッド」の作成がサポートされています。 通常、プラットフォーム・スレッドには、オペレーティング・システムによって保守される大きなスタックおよびその他のリソースがあります。 プラットフォームのスレッドは、すべてのタイプのタスクの実行に適していますが、リソースは限られています。
プラットフォーム・スレッドは、デフォルトで自動的に生成されたスレッド名を取得します。
プラットフォーム・スレッドは、「デーモン」または「非デーモン」スレッドに指定されています。 Java仮想マシンが起動すると、通常、非デーモン・スレッド(通常はアプリケーションのmainメソッドをコールするスレッド)が1つあります。 「停止シーケンス」は、起動されたすべての非デーモン・スレッドが終了すると開始します。 未起動のデーモン以外のスレッドは、停止シーケンスの開始を妨げません。
デーモンのステータスに加えて、プラットフォーム・スレッドには「スレッドの優先順位」があり、「スレッド・グループ」のメンバーです。
仮想スレッド
Threadでは、「仮想スレッド」の作成もサポートされています。 仮想スレッドは通常、オペレーティング・システムではなくJavaランタイムによってスケジュールされる「ユーザー・モード・スレッド」です。 仮想スレッドでは通常、必要なリソースはほとんどなく、単一のJava仮想マシンで数百万の仮想スレッドがサポートされる場合があります。 仮想スレッドは、ほとんどの時間をブロックしてI/O演算の完了を待機するタスクの実行に適しています。 仮想スレッドは、長時間実行するCPU集中型の演算を目的としていません。
仮想スレッドは通常、「キャリア・スレッド」として使用される小さなプラットフォーム・スレッド・セットを使用します。 ロックおよびI/O演算は、ある仮想スレッドから別の仮想スレッドにキャリア・スレッドを再スケジュールできる演算の例です。 仮想スレッドで実行されているコードは、基になるキャリア・スレッドを認識しません。 「現在のスレッド」への参照を取得するために使用されるcurrentThread()メソッドは、常に仮想スレッドのThreadオブジェクトを返します。
仮想スレッドにはデフォルトでスレッド名がありません。 スレッド名が設定されていない場合、getNameメソッドは空の文字列を返します。
仮想スレッドはデーモン・スレッドであるため、「停止シーケンス」の開始を妨げません。 仮想スレッドには、変更できない固定の「スレッドの優先順位」があります。
スレッドの作成および開始
Threadでは、プラットフォーム・スレッドを作成するためのパブリック・コンストラクタと、実行するスレッドをスケジュールするstartメソッドを定義します。 Threadはカスタマイズやその他の高度な理由で拡張できますが、ほとんどのアプリケーションではこれを行う必要はほとんどありません。
Threadは、プラットフォーム・スレッドと仮想スレッドの両方を作成および開始するためのThread.BuilderPREVIEW APIを定義します。 次に、ビルダーを使用する例を示します:
Runnable runnable = ...
// Start a daemon thread to run a task
Thread thread = Thread.ofPlatform().daemon().start(runnable);
// Create an unstarted thread with name "duke", its start() method
// must be invoked to schedule it to execute.
Thread thread = Thread.ofPlatform().name("duke").unstarted(runnable);
// A ThreadFactory that creates daemon threads named "worker-0", "worker-1", ...
ThreadFactory factory = Thread.ofPlatform().daemon().name("worker-", 0).factory();
// Start a virtual thread to run a task
Thread thread = Thread.ofVirtual().start(runnable);
// A ThreadFactory that creates virtual threads
ThreadFactory factory = Thread.ofVirtual().factory();
スレッド作成時の継承
Threadは、子Threadの作成時に親スレッド値からinheritable-thread-local変数(コンテキスト・クラス・ローダーを含む)の初期値を継承します。 5パラメータconstructorを使用して、構成スレッドから初期値を継承しないスレッドを作成できます。 Thread.Builderを使用する場合、inheritInheritableThreadLocalsPREVIEWメソッドを使用して初期値を継承するかどうかを選択できます。
プラットフォーム・スレッドは、デーモンのステータス、スレッド優先度、および(またはセキュリティ・マネージャによって選択されていない)が指定されていない場合、スレッド・グループを継承します。
プラットフォーム・スレッド「取得」を作成して、「特権アクション」を実行するコードを実行するときに新しいスレッドの「権限」を制限します。 取得されたコール元コンテキストは新しいスレッド「継承されたAccessControlContext」です。 仮想スレッドを作成しても、呼び出し元のコンテキストは取得されません。特権アクションを実行するコードを実行するとき、仮想スレッドにはアクセス権がありません。
特に指定しないかぎり、このクラスのコンストラクタまたはメソッドにnull引数を渡すと、NullPointerExceptionがスローされます。
- 実装上のノート:
- JDKリファレンス実装では、仮想スレッド・スケジューラは次のシステム・プロパティで構成できます:
システム・プロパティ 説明 jdk.virtualThreadScheduler.parallelism仮想スレッドのスケジューリングに使用できるプラットフォーム・スレッドの数。 デフォルトで使用可能なプロセッサの数です。 jdk.virtualThreadScheduler.maxPoolSizeスケジューラで使用可能なプラットフォーム・スレッドの最大数。 デフォルトは256です。 - 導入されたバージョン:
- 1.0
-
ネストされたクラスのサマリー
ネストされたクラス修飾子と型クラス説明static interfacePreview.ThreadおよびThreadFactoryオブジェクトのビルダー。static enumスレッドの状態です。static interface捕捉されない例外のためにThreadが突然終了したときに呼び出されるハンドラのインタフェース。 -
フィールドのサマリー
フィールド修飾子と型フィールド説明static final intスレッドに設定できる最高優先順位です。static final intスレッドに設定できる最低優先順位です。static final intスレッドに割り当てられるデフォルトの優先順位です。 -
コンストラクタのサマリー
コンストラクタコンストラクタ説明Thread()新しいプラットフォームThreadを初期化します。新しいプラットフォームThreadを初期化します。新しいプラットフォームThreadを初期化します。新しいプラットフォームThreadを初期化します。Thread(ThreadGroup group, Runnable task) 新しいプラットフォームThreadを初期化します。Thread(ThreadGroup group, Runnable task, String name) 新しいプラットフォームThreadを初期化して、実行オブジェクトとしてtaskを持ち、名前として指定されたnameを持ち、groupで参照されるスレッド・グループに属するようにします。Thread(ThreadGroup group, Runnable task, String name, long stackSize) 新しいプラットフォームThreadを初期化して、実行オブジェクトとしてtaskを持ち、名前として指定されたnameを持ち、groupで参照されるスレッド・グループに属し、指定された「スタック・サイズ」を持つようにします。Thread(ThreadGroup group, Runnable task, String name, long stackSize, boolean inheritInheritableThreadLocals) 新しいプラットフォームThreadを初期化して、実行オブジェクトとしてtaskを持ち、名前として指定されたnameを持ち、groupで参照されるスレッド・グループに属し、指定されたstackSizeを持ち、inheritThreadLocalsがtrueの場合に「継承可能なスレッド・ローカル」変数の初期値を継承します。Thread(ThreadGroup group, String name) 新しいプラットフォームThreadを初期化します。 -
メソッドのサマリー
修飾子と型メソッド説明static int現在のスレッド・グループおよびそのサブグループ内のliveプラットフォーム・スレッド数の見積りを返します。final void削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは、非推奨であり、今後のリリースで削除される可能性があります。「セキュリティ・マネージャ」と組み合わせて使用すると便利です。protected Objectclone()Threadを意味のあるかたちで複製することは不可能なため、CloneNotSupportedExceptionをスローします。int削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは、最初にスタック・フレーム数をカウントするように設計されていましたが、結果は明確に定義されておらず、スレッド機能に依存していました。static Thread現在のスレッドのThreadオブジェクトを返します。static void現在のスレッドのスタック・トレースを標準エラー・ストリームに出力します。static int指定された配列に、現在のスレッド・グループおよびそのサブグループ内のすべてのliveプラットフォーム・スレッドをコピーします。static Map<Thread,StackTraceElement[]> すべてのライブ・プラットフォーム・スレッドのスタック・トレースのマップを返します。このスレッドのコンテキストClassLoaderを返します。キャッチされない例外によりスレッドが突然終了したときに呼び出されるデフォルトのハンドラを返します。longgetId()非推奨。このメソッドはfinalではなく、スレッドIDではない値を返すためにオーバーライドできます。final StringgetName()このスレッドの名前を返します。final intこのスレッドの優先順位を返します。このスレッドのスタック・ダンプを表すスタック・トレース要素の配列を返します。getState()このスレッドの状態を返します。final ThreadGroupスレッド・スレッド・グループまたはnullを返します(スレッドが終了している場合)。キャッチされない例外によりスレッドが突然終了したときに呼び出されるハンドラを返します。static boolean現在のスレッドが指定されたオブジェクトのモニター・ロックを保持している場合にのみ、trueを返します。voidこのスレッドに割り込みます。static boolean現在のスレッドが割り込まれているかどうかを調べします。final booleanisAlive()このスレッドが生存しているかどうかを判定します。final booleanisDaemon()このスレッドがデーモン・スレッドであるかどうかを判定します。booleanこのスレッドが割り込まれているどうかを調べます。final booleanPreview.このスレッドが仮想スレッドである場合は、trueを返します。final voidjoin()このスレッドが終了するまで待機します。final voidjoin(long millis) このスレッドが終了するまで最大millisミリ秒待機します。final voidjoin(long millis, int nanos) このスレッドが終了するまで、最大millisミリ秒にnanosナノ秒を加えて待機します。final booleanこのスレッドが指定された待機時間まで終了するのを待機します。Preview.プラットフォーム・スレッドを作成するプラットフォームThreadまたはThreadFactoryを作成するためのビルダーを返します。Preview.仮想スレッドを作成する仮想ThreadまたはThreadFactoryを作成するためのビルダーを返します。static void他のアクティビティの一部で1つ以上のアクションが発生するまで、発信者が瞬間的に進行できないことを示します。final voidresume()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは、最初にsuspend()で中断されたスレッドを再開するように指定されました。voidrun()このメソッドは、実行時にスレッドによって実行されます。voidこのスレッドのコンテキストClassLoaderを設定します。final voidsetDaemon(boolean on) このスレッドを「デーモン」または「非デーモン」スレッドとしてマークします。static voidキャッチされない例外により、スレッドが突然終了したときや、このスレッドに対してほかにハンドラが定義されていないときに呼び出されるデフォルトのハンドラを設定します。final voidこのスレッドの名前を引数nameに等しくなるように変更します。final voidsetPriority(int newPriority) このスレッドの優先順位を変更します。voidキャッチされない例外により、突然スレッドが終了したときに使用されるハンドラを設定します。static voidsleep(long millis) システム・タイマーとスケジューラが正確であることを前提として、現在実行中のスレッドを、指定されたミリ秒数の間、スリープ(一時的に実行を停止)させます。static voidsleep(long millis, int nanos) システム・タイマーとスケジューラが正確であることを前提として、現在実行中のスレッドを、指定されたミリ秒数に指定されたナノ秒数を加算した間、スリープ(一時的に実行を停止)させます。static void現在実行中のスレッドが、システム・タイマーおよびスケジューラの精度および精度に従って、指定された期間(一時停止実行)をスリープします。voidstart()実行を開始するようにこのスレッドをスケジュールします。static ThreadstartVirtualThread(Runnable task) Preview.タスクを実行するための仮想スレッドを作成し、実行するようにスケジュールします。final voidstop()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは元々、被害者スレッドがThreadDeathをスローするようにして、被害者スレッドを"停止"に指定されました。final voidsuspend()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは、最初にスレッドを一時停止するように指定されました。final longthreadId()このスレッドの識別子を返します。toString()このスレッドの文字列表現を返します。static voidyield()現在のスレッドが現在のプロセッサ使用量を譲る用意があることを示す、スケジューラへのヒントです。
-
フィールド詳細
-
MIN_PRIORITY
public static final int MIN_PRIORITYスレッドに設定できる最低優先順位です。- 関連項目:
-
NORM_PRIORITY
public static final int NORM_PRIORITYスレッドに割り当てられるデフォルトの優先順位です。- 関連項目:
-
MAX_PRIORITY
public static final int MAX_PRIORITYスレッドに設定できる最高優先順位です。- 関連項目:
-
-
コンストラクタの詳細
-
Thread
public Thread()新しいプラットフォームThreadを初期化します。 このコンストラクタは、Thread(null, null, gname)(gnameは新たに生成される名前)と同じ効果を持ちます。 自動的に作成される名前は、nを整数とすると"Thread-"+nの形式を取ります。このコンストラクタは、
Threadを拡張してrun()メソッドをオーバーライドする場合にのみ役立ちます。- 関連項目:
-
Thread
public Thread(Runnable task) 新しいプラットフォームThreadを初期化します。 このコンストラクタは、「糸」(null, task, gname)と同じ効果を持ちます。ここで、gnameは新しく生成された名前です。 自動的に作成される名前は、nを整数とすると"Thread-"+nの形式を取ります。NULL以外のタスクの場合、このコンストラクタを直接呼び出すことは、次のようになります:
Thread.ofPlatform().unstarted(task);- パラメータ:
task- このスレッドの開始時にrunメソッドが呼び出されるオブジェクト。nullの場合、このクラスのrunメソッドは何も行わない。- 関連項目:
-
Thread
public Thread(ThreadGroup group, Runnable task) 新しいプラットフォームThreadを初期化します。 このコンストラクタは、「糸」(group, task, gname)と同じ効果を持ちます。ここで、gnameは新しく生成された名前です。 自動的に作成される名前は、nを整数とすると"Thread-"+nの形式を取ります。null以外のグループおよびタスクの場合、このコンストラクタを直接起動することは、次と同等です:
Thread.ofPlatform().group(group).unstarted(task);- パラメータ:
group- スレッド・グループ。nullであり、かつセキュリティ・マネージャが存在する場合、SecurityManager.getThreadGroup()によってグループが決定されます。 セキュリティ・マネージャが存在しない場合やSecurityManager.getThreadGroup()からnullが返される場合、グループは現在のスレッドのスレッド・グループに設定されます。task- このスレッドの開始時にrunメソッドが呼び出されるオブジェクト。nullの場合、このスレッドのrunメソッドが呼び出されます。- 例外:
SecurityException- 現在のスレッドが、指定されたスレッド・グループ内のスレッドを作成できない場合- 関連項目:
-
Thread
public Thread(String name) 新しいプラットフォームThreadを初期化します。 このコンストラクタは、Thread(null, null, name)と同じ効果を持ちます。このコンストラクタは、
Threadを拡張してrun()メソッドをオーバーライドする場合にのみ役立ちます。- パラメータ:
name- 新しいスレッドの名前- 関連項目:
-
Thread
public Thread(ThreadGroup group, String name) 新しいプラットフォームThreadを初期化します。 このコンストラクタは、Thread(group, null, name)と同じ効果を持ちます。このコンストラクタは、
Threadを拡張してrun()メソッドをオーバーライドする場合にのみ役立ちます。- パラメータ:
group- スレッド・グループ。nullであり、かつセキュリティ・マネージャが存在する場合、SecurityManager.getThreadGroup()によってグループが決定されます。 セキュリティ・マネージャが存在しない場合やSecurityManager.getThreadGroup()からnullが返される場合、グループは現在のスレッドのスレッド・グループに設定されます。name- 新しいスレッドの名前- 例外:
SecurityException- 現在のスレッドが、指定されたスレッド・グループ内のスレッドを作成できない場合- 関連項目:
-
Thread
新しいプラットフォームThreadを初期化します。 このコンストラクタの効果は、Thread(null, task, name)と同じです。NULL以外のタスクおよび名前の場合、このコンストラクタを直接起動することと同等です:
Thread.ofPlatform().name(name).unstarted(task);- パラメータ:
task- このスレッドの開始時にrunメソッドが呼び出されるオブジェクト。nullの場合、このスレッドのrunメソッドが呼び出されます。name- 新しいスレッドの名前- 関連項目:
-
Thread
public Thread(ThreadGroup group, Runnable task, String name) 新しいプラットフォームThreadを初期化して、実行オブジェクトとしてtaskを持ち、名前として指定されたnameを持ち、groupで参照されるスレッド・グループに属するようにします。セキュリティ・マネージャが存在する場合は、
checkAccessメソッドがThreadGroupをその引数に指定して呼び出されます。さらに、
getContextClassLoaderまたはsetContextClassLoaderメソッドをオーバーライドしたサブクラスのコンストラクタから直接的または間接的に呼び出された場合、そのcheckPermissionメソッドがRuntimePermission("enableContextClassLoaderOverride")アクセス権で呼び出されます。新しく作成されたスレッドの優先度は、それを作成するスレッドの優先度が小さく、スレッド・グループの最大許容優先度です。 この優先順位を新しい値に変更する場合は、setPriorityメソッドを使用できます。
新しく作成されたスレッドは、それを作成するスレッドがデーモン・スレッドとマークされている場合にだけ、デーモン・スレッドとマークされます。 スレッドがデーモンであるかどうかを変更する場合は、setDaemonメソッドを使用できます。
null以外のグループ、タスクおよび名前の場合、このコンストラクタを直接起動すると、次のようになります:
Thread.ofPlatform().group(group).name(name).unstarted(task);- パラメータ:
group- スレッド・グループ。nullであり、かつセキュリティ・マネージャが存在する場合、SecurityManager.getThreadGroup()によってグループが決定されます。 セキュリティ・マネージャが存在しない場合やSecurityManager.getThreadGroup()からnullが返される場合、グループは現在のスレッドのスレッド・グループに設定されます。task- このスレッドの開始時にrunメソッドが呼び出されるオブジェクト。nullの場合、このスレッドのrunメソッドが呼び出されます。name- 新しいスレッドの名前- 例外:
SecurityException- 現在のスレッドが、指定されたスレッド・グループ内にスレッドを作成できない、またはコンテキスト・クラス・ローダーのメソッドをオーバーライドできない場合。- 関連項目:
-
Thread
public Thread(ThreadGroup group, Runnable task, String name, long stackSize) 新しいプラットフォームThreadを初期化して、実行オブジェクトとしてtaskを持ち、名前として指定されたnameを持ち、groupで参照されるスレッド・グループに属し、指定された「スタック・サイズ」を持つようにします。このコンストラクタは、スレッドのスタック・サイズ指定が可能である点を除き、
Thread(ThreadGroup,Runnable,String)と同じです。 スタック・サイズは、仮想マシンをこのスレッドのスタックに割り当てるアドレス空間のおよそのバイト数になります。stackSizeパラメータが存在する場合、その効果はプラットフォームによって大きく異なります。いくつかのプラットフォームでは、
stackSizeパラメータにより大きな値を指定することで、スレッドがStackOverflowErrorをスローする前により大きな回帰深度を達成することが可能になります。 同様に、より小さな値を指定することで、より多くのスレッドがOutOfMemoryError(またはほかの内部エラー)をスローせずに、並行して存在することが可能になります。stackSizeパラメータの値と最大再帰深度および同時実行性レベルの関係の詳細は、プラットフォームに依存します。 プラットフォームによっては、stackSizeパラメータの値がなんら影響を与えない場合があります。仮想マシンは、
stackSizeパラメータを自由に扱い、指示できます。 プラットフォームでは指定された値が小さすぎる場合、仮想マシンは代わりにプラットフォーム固有の最小値を使用できます。指定された値が大きすぎる場合には、仮想マシンは代わりにプラットフォーム固有の最大値を使用できます。 同様に、仮想マシンは、適切な場合には指定された値の切り上げまたは切下げを自由に実行(または完全に無視)できます。stackSizeパラメータに値ゼロを指定すると、このコンストラクタはThread(ThreadGroup, Runnable, String)コンストラクタと正確に同じ動作を実行します。このコンストラクタの動作はプラットフォームによって異なるために、慎重に使用する必要があります。 指定された計算の実行に必要なスレッド・スタック・サイズは、JRE実装によって異なる可能性があります。 このため、スタック・サイズ・パラメータを注意深くチューニングしたり、アプリケーションを実行するJRE実装ごとにチューニングを繰り返したりすることが必要な場合があります。
実装にあたってのノート: Javaプラットフォーム実装者は、
stackSizeパラメータを基準にして実装の動作をドキュメント化しておくことをお薦めします。null以外のグループ、タスクおよび名前の場合、このコンストラクタを直接起動すると、次のようになります:
Thread.ofPlatform().group(group).name(name).stackSize(stackSize).unstarted(task);- パラメータ:
group- スレッド・グループ。nullであり、かつセキュリティ・マネージャが存在する場合、SecurityManager.getThreadGroup()によってグループが決定されます。 セキュリティ・マネージャが存在しない場合やSecurityManager.getThreadGroup()からnullが返される場合、グループは現在のスレッドのスレッド・グループに設定されます。task- このスレッドの開始時にrunメソッドが呼び出されるオブジェクト。nullの場合、このスレッドのrunメソッドが呼び出されます。name- 新しいスレッドの名前stackSize- 新規スレッドのスタック・サイズまたはゼロ(このパラメータを無視することを示す)。- 例外:
SecurityException- 現在のスレッドが、指定されたスレッド・グループ内のスレッドを作成できない場合- 導入されたバージョン:
- 1.4
- 関連項目:
-
Thread
public Thread(ThreadGroup group, Runnable task, String name, long stackSize, boolean inheritInheritableThreadLocals) 新しいプラットフォームThreadを初期化して、実行オブジェクトとしてtaskを持ち、名前として指定されたnameを持ち、groupで参照されるスレッド・グループに属し、指定されたstackSizeを持ち、inheritThreadLocalsがtrueの場合に「継承可能なスレッド・ローカル」変数の初期値を継承します。このコンストラクタは、構築スレッドからの継承可能なスレッド・ローカル変数の初期値を継承するかどうかを指定する機能を追加した
Thread(ThreadGroup,Runnable,String,long)と同じです。 これにより、継承可能なスレッド・ローカルよりも細かい粒度制御が可能になります。inheritThreadLocalsにfalseの値を渡すときは、新しいスレッドが特定のスレッド・ローカル値が継承されることを期待するコードを実行すると、予期しない動作が発生する可能性があるので注意が必要です。inheritThreadLocalsパラメータにtrueの値を指定すると、このコンストラクタはThread(ThreadGroup, Runnable, String, long)コンストラクタとまったく同じように動作します。null以外のグループ、タスクおよび名前の場合、このコンストラクタを直接起動すると、次のようになります:
Thread.ofPlatform() .group(group) .name(name) .stackSize(stackSize) .inheritInheritableThreadLocals(inheritInheritableThreadLocals) .unstarted(task);- パラメータ:
group- スレッド・グループ。nullであり、かつセキュリティ・マネージャが存在する場合、SecurityManager.getThreadGroup()によってグループが決定されます。 セキュリティ・マネージャが存在しない場合やSecurityManager.getThreadGroup()からnullが返される場合、グループは現在のスレッドのスレッド・グループに設定されます。task- このスレッドの開始時にrunメソッドが呼び出されるオブジェクト。nullの場合、このスレッドのrunメソッドが呼び出されます。name- 新しいスレッドの名前stackSize- 新しいスレッドの望ましいスタック・サイズ、またはこのパラメータが無視されることを示すゼロinheritInheritableThreadLocals-trueの場合、構造化スレッドから継承可能なスレッド・ロケールの初期値を継承します。それ以外の場合、初期値は継承されません- 例外:
SecurityException- 現在のスレッドが、指定されたスレッド・グループ内のスレッドを作成できない場合- 導入されたバージョン:
- 9
- 関連項目:
-
-
メソッドの詳細
-
currentThread
public static Thread currentThread()現在のスレッドのThreadオブジェクトを返します。- 戻り値:
- 現在のスレッド
-
yield
public static void yield()現在のスレッドが現在のプロセッサ使用量を譲る用意があることを示す、スケジューラへのヒントです。 スケジューラはこのヒントを無視してもかまいません。譲位は、通常であればCPUを過剰に使用してしまうスレッド間で相対的な進行状況を改善しようとするヒューリスティックな試みです。 その使用時には詳細なプロファイルやベンチマークも組み合わせることで、目的の効果が実際に得られていることを確認すべきです。
このメソッドを使用する機会はまれにしかありません。 これは、デバッグ目的やテスト目的で役立つ可能性があります(競合状態によるバグを再現するのに役立つ可能性がある)。 これは、並行制御の構成要素(
java.util.concurrent.locksパッケージ内の構成要素など)を設計する際にも役立つ可能性があります。 -
sleep
public static void sleep(long millis) throws InterruptedException システム・タイマーとスケジューラが正確であることを前提として、現在実行中のスレッドを、指定されたミリ秒数の間、スリープ(一時的に実行を停止)させます。 スレッドはモニターの所有権を失いません。- パラメータ:
millis- ミリ秒単位のスリープ時間の長さ- 例外:
IllegalArgumentException-millisの値が負の場合InterruptedException- 何らかのスレッドが現在のスレッドに割り込んだ場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。
-
sleep
public static void sleep(long millis, int nanos) throws InterruptedException システム・タイマーとスケジューラが正確であることを前提として、現在実行中のスレッドを、指定されたミリ秒数に指定されたナノ秒数を加算した間、スリープ(一時的に実行を停止)させます。 スレッドはモニターの所有権を失いません。- パラメータ:
millis- ミリ秒単位のスリープ時間の長さnanos-0-999999追加でスリープするナノ秒- 例外:
IllegalArgumentException-millisの値が負の場合、またはnanosの値が範囲0-999999に含まれない場合InterruptedException- 何らかのスレッドが現在のスレッドに割り込んだ場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。
-
sleep
public static void sleep(Duration duration) throws InterruptedException 現在実行中のスレッドが、システム・タイマーおよびスケジューラの精度および精度に従って、指定された期間(一時停止実行)をスリープします。 期間がnegativeの場合、このメソッドはno-opです。- パラメータ:
duration- 睡眠時間- 例外:
InterruptedException- 現在のスレッドがスリープ中に中断された場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。- 導入されたバージョン:
- 19
-
onSpinWait
public static void onSpinWait()他のアクティビティの一部で1つ以上のアクションが発生するまで、発信者が瞬間的に進行できないことを示します。 ループ構造の各繰り返し内でこのメソッドを呼び出すことにより、呼び出しスレッドは、ビジー待機中であることをランタイムに示します。 ランタイムは、ループの構築を呼び出す際のパフォーマンスを向上させるための行動を取るかもしれません。- APIのノート:
- 例として、あるフラグがそのメソッドの外に設定されるまで、ループ内で回転するクラス内のメソッドを考えてみましょう。
onSpinWaitメソッドへの呼び出しは、スピン・ループ内に配置する必要があります。class EventHandler { volatile boolean eventNotificationNotReceived; void waitForEventAndHandleIt() { while ( eventNotificationNotReceived ) { Thread.onSpinWait(); } readAndProcessEvent(); } void readAndProcessEvent() { // Read event from some source and process it . . . } }上記のコードは、
onSpinWaitメソッドがまったく呼び出されなかった場合でも正しいままです。 しかしながら、いくつかのアーキテクチャでは、Java Virtual Machineは、より有益な方法でそのようなコード・パターンに対処するためにプロセッサ命令を発行してもよい。 - 導入されたバージョン:
- 9
-
ofPlatform
public static Thread.Builder.OfPlatformPREVIEW ofPlatform()ofPlatformは、JavaプラットフォームのプレビューAPIです。プレビュー機能が有効な場合のみ、プログラムでofPlatformを使用できます。プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。プラットフォーム・スレッドを作成するプラットフォームThreadまたはThreadFactoryを作成するためのビルダーを返します。プラットフォーム・スレッド作成時のセキュリティ・マネージャとの相互作用
セキュリティ・マネージャ・セットがあるときにプラットフォーム・スレッドを作成すると、スレッド・グループを使用してセキュリティ・マネージャの
checkAccess(ThreadGroup)メソッドが起動されます。 スレッド・グループがOfPlatform.groupPREVIEWメソッドで設定されていない場合、セキュリティ・マネージャのgetThreadGroupメソッドが最初に呼び出されてスレッド・グループが選択されます。 セキュリティ・マネージャのgetThreadGroupメソッドがnullを返す場合、構築スレッドのスレッド・グループが使用されます。- APIのノート:
- 次に、ビルダーを使用する例を示します:
// Start a daemon thread to run a task Thread thread = Thread.ofPlatform().daemon().start(runnable); // Create an unstarted thread with name "duke", its start() method // must be invoked to schedule it to execute. Thread thread = Thread.ofPlatform().name("duke").unstarted(runnable); // A ThreadFactory that creates daemon threads named "worker-0", "worker-1", ... ThreadFactory factory = Thread.ofPlatform().daemon().name("worker-", 0).factory(); - 戻り値:
ThreadまたはThreadFactoryオブジェクトを作成するためのビルダー。- 導入されたバージョン:
- 19
-
ofVirtual
public static Thread.Builder.OfVirtualPREVIEW ofVirtual()ofVirtualは、JavaプラットフォームのプレビューAPIです。プレビュー機能が有効な場合のみ、プログラムでofVirtualを使用できます。プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。仮想スレッドを作成する仮想ThreadまたはThreadFactoryを作成するためのビルダーを返します。- APIのノート:
- 次に、ビルダーを使用する例を示します:
// Start a virtual thread to run a task. Thread thread = Thread.ofVirtual().start(runnable); // A ThreadFactory that creates virtual threads ThreadFactory factory = Thread.ofVirtual().factory(); - 戻り値:
ThreadまたはThreadFactoryオブジェクトを作成するためのビルダー。- 例外:
UnsupportedOperationException- プレビュー機能が有効になっていない場合- 導入されたバージョン:
- 19
-
clone
protected Object clone() throws CloneNotSupportedExceptionThreadを意味のあるかたちで複製することは不可能なため、CloneNotSupportedExceptionをスローします。 代わりに新しいThreadを構築します。- オーバーライド:
clone、クラスObject- 戻り値:
- このインスタンスの複製。
- 例外:
CloneNotSupportedException- 常時- 関連項目:
-
startVirtualThread
startVirtualThreadは、JavaプラットフォームのプレビューAPIです。プレビュー機能が有効な場合のみ、プログラムでstartVirtualThreadを使用できます。プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。タスクを実行するための仮想スレッドを作成し、実行するようにスケジュールします。このメソッドは、次と同等です。
Thread.ofVirtual().start(task);- パラメータ:
task- スレッドの実行時に実行するオブジェクト- 戻り値:
- 新しい起動された仮想スレッド
- 例外:
UnsupportedOperationException- プレビュー機能が有効になっていない場合- 導入されたバージョン:
- 19
- 関連項目:
-
isVirtual
public final boolean isVirtual()isVirtualは、JavaプラットフォームのプレビューAPIです。プレビュー機能が有効な場合のみ、プログラムでisVirtualを使用できます。プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。このスレッドが仮想スレッドである場合は、trueを返します。 仮想スレッドは、オペレーティング・システムではなくJava仮想マシンによってスケジュールされます。- 戻り値:
- このスレッドが仮想スレッドの場合は
true - 導入されたバージョン:
- 19
-
start
public void start()実行を開始するようにこのスレッドをスケジュールします。 スレッドは現在のスレッドとは独立して実行されます。スレッドは一度に開始できます。 特に、スレッドは終了後に再起動することはできません。
- 例外:
IllegalThreadStateException- スレッドがすでに起動していた場合
-
run
public void run()このメソッドは、実行時にスレッドによって実行されます。Threadのサブクラスがこのメソッドをオーバーライドする場合があります。このメソッドは、直接起動するものではありません。 このスレッドが
Runnableタスクで作成されたプラットフォーム・スレッドである場合、このメソッドを起動すると、タスクのrunメソッドが起動されます。 このスレッドが仮想スレッドである場合、このメソッドを呼び出すと何も直接実行されません。 -
stop
@Deprecated(since="1.2", forRemoval=true) public final void stop()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは元々、被害者スレッドがThreadDeathをスローするようにして、被害者スレッドを"停止"に指定されました。 本来は安全ではありません。 スレッドを停止すると、(スタックを伝播するThreadDeath例外の自然な結果として)がロックされたすべてのモニターのロックが解除されました。 これらのモニターによって以前に保護されていたいずれかのオブジェクトが一貫性のない状態であった場合は、破損したオブジェクトがほかのスレッドから見えるようになり、結果として任意の動作が発生する可能性があります。stopの使用は、ターゲット・スレッドが実行を停止することを示すために変数を変更するコードに置き換える必要があります。 ターゲット・スレッドは、この変数を定期的に検査し、実行を停止するべきことを変数が示している場合には、スレッドのrunメソッドから通常の方法で復帰する必要があります。 条件変数などでターゲット・スレッドが長い間待機している場合、待機を中断させるには、interruptメソッドを使用します。 詳細は、「Thread.stop、Thread.suspend、およびThread.resumeが推奨されない理由」を参照してください。UnsupportedOperationExceptionをスローします。- 例外:
UnsupportedOperationException- 常時
-
interrupt
public void interrupt()このスレッドに割り込みます。現在のスレッドが自身への割り込み(常に許可される)を行うのでないかぎり、このスレッドの
checkAccessメソッドが呼び出されますが、その際、SecurityExceptionがスローされる可能性があります。このスレッドが、
Objectクラス、またはjoin()、join(long)、join(long, int)、sleep(long)、またはsleep(long, int)メソッドのwait()、wait(long)、またはwait(long, int)メソッドの呼び出しでブロックされている場合、割込みステータスはクリアされ、InterruptedExceptionを受け取ります。InterruptibleChannelに対するI/O操作でこのスレッドがブロックされる場合、チャネルは閉じられ、スレッドの割込みステータスが設定されます。また、スレッドはClosedByInterruptExceptionを受け取ります。Selectorでこのスレッドがブロックされる場合、スレッドの割込みステータスが設定されて、選択操作から即座に返されます。通常、返される値は、セレクタのwakeupメソッドが呼び出された場合と同じく、ゼロ以外の値になります。前述の条件のどれにも当てはまらない場合、このスレッドの割込みステータスが設定されます。
生存していないスレッドが割込みを受けることが、効果を持つ必要がない場合。
- 実装上のノート:
- JDKリファレンス実装では、中断されたリクエストがまだ記録されていないスレッドの割込みによって、
interruptedおよびisInterrupted()によってレポートされます。 - 例外:
SecurityException- 現在のスレッドがこのスレッドを変更できない場合
-
interrupted
public static boolean interrupted()現在のスレッドが割り込まれているかどうかを調べします。 このメソッドによりスレッドの割込みステータスがクリアされます。 つまり、このメソッドが続けて2回呼び出された場合、2回目の呼出しはfalseを返します(最初の呼出しが割込みステータスをクリアしたあとで、2番目の呼出しがそれを確認する前に現在のスレッドがもう一度割り込まれた場合を除く)。- 戻り値:
- 現在のスレッドが割り込まれている場合は
true、そうでない場合はfalse。 - 関連項目:
-
isInterrupted
public boolean isInterrupted()このスレッドが割り込まれているどうかを調べます。 このメソッドによってスレッドの割込みステータスが影響を受けることはありません。- 戻り値:
- このスレッドが割り込まれている場合は
true、そうでない場合はfalse。 - 関連項目:
-
isAlive
public final boolean isAlive()このスレッドが生存しているかどうかを判定します。 スレッドが開始され、まだ終了していない場合、スレッドは存続しています。- 戻り値:
- このスレッドが生存している場合は
true、そうでない場合はfalse。
-
suspend
@Deprecated(since="1.2", forRemoval=true) public final void suspend()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは、最初にスレッドを一時停止するように指定されました。 本来デッドロックが発生しやすいものでした。 ターゲット・スレッドが中断されたときにクリティカルなシステム・リソースを保護しているモニターでロックを保持していた場合、スレッドはターゲット・スレッドが再開されるまでリソースにアクセスできませんでした。 ターゲット・スレッドを再開しようとしているスレッドが、resumeをコールする前にモニターをロックしようとすると、デッドロックが発生します。 このようなデッドロックは通常、"凍結"プロセスとして現れます。 詳細は、「Thread.stop、Thread.suspend、およびThread.resumeが推奨されない理由」を参照してください。UnsupportedOperationExceptionをスローします。- 例外:
UnsupportedOperationException- 常時
-
resume
@Deprecated(since="1.2", forRemoval=true) public final void resume()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは、最初にsuspend()で中断されたスレッドを再開するように指定されました。 スレッドの一時停止は本質的にデッドロックが発生しやすいものでした。 詳細は、「Thread.stop、Thread.suspend、およびThread.resumeが推奨されない理由」を参照してください。UnsupportedOperationExceptionをスローします。- 例外:
UnsupportedOperationException- 常時
-
setPriority
public final void setPriority(int newPriority) このスレッドの優先順位を変更します。 プラットフォーム・スレッドの場合、優先度は指定されたnewPriorityの小さい方に設定され、スレッド「スレッド・グループ」の最大許容優先度に設定されます。 仮想スレッドの優先度は常にNORM_PRIORITYで、newPriorityは無視されます。- パラメータ:
newPriority- 新しいスレッド優先度- 例外:
IllegalArgumentException- 優先度がMIN_PRIORITYからMAX_PRIORITYの範囲内にない場合。SecurityException- 現在のスレッドがこのスレッドを変更できない場合とcheckAccess()によって判定された場合- 関連項目:
-
getPriority
public final int getPriority()このスレッドの優先順位を返します。仮想スレッドの優先度は常に
NORM_PRIORITYです。- 戻り値:
- このスレッドの優先順位。
- 関連項目:
-
setName
public final void setName(String name) このスレッドの名前を引数nameに等しくなるように変更します。まず、このスレッドの
checkAccessメソッドが、引数なしで呼び出されます。 その結果、SecurityExceptionがスローされることがあります。- 実装上のノート:
- JDKリファレンス実装で、このスレッドが現在のスレッドであり、Java Native Interface AttachCurrentThread関数を使用してVMにアタッチされなかったプラットフォーム・スレッドである場合、このメソッドはオペレーティング・システムのスレッド名を設定します。 これはデバッグやトラブルシューティングに役立ちます。
- パラメータ:
name- このスレッドの新しい名前。- 例外:
SecurityException- 現在のスレッドがこのスレッドを変更できない場合。- 関連項目:
-
getName
public final String getName()このスレッドの名前を返します。- 戻り値:
- このスレッドの名前。
- 関連項目:
-
getThreadGroup
public final ThreadGroup getThreadGroup()スレッド・スレッド・グループまたはnullを返します(スレッドが終了している場合)。仮想スレッドに対して返されるスレッド・グループは、特別な「仮想スレッドの場合はThreadGroup」です。
- 戻り値:
- このスレッド・グループまたは
null
-
activeCount
public static int activeCount()現在のスレッド・グループおよびそのサブグループ内のliveプラットフォーム・スレッド数の見積りを返します。 仮想スレッドは見積りに含まれていません。返される値は単なる推定値ですが、それは、このメソッドが内部のデータ構造体をトラバースしている間にスレッド数が動的に変化する可能性があるほか、特定のシステム・スレッドの存在の影響を受ける可能性もあるからです。 このメソッドは主に、デバッグおよび監視目的のためのものです。
- 戻り値:
- 現在のスレッド・スレッド・グループおよび現在のスレッド・グループを祖先とするその他のスレッド・グループのライブ・プラットフォーム・スレッド数の見積り
-
enumerate
public static int enumerate(Thread[] tarray) 指定された配列に、現在のスレッド・グループおよびそのサブグループ内のすべてのliveプラットフォーム・スレッドをコピーします。 このメソッドは単純に、現在のスレッドのスレッド・グループのThreadGroup.enumerate(Thread[])メソッドを呼び出します。 仮想スレッドはこのメソッドによって列挙されません。アプリケーションでは、配列がどの程度の大きさになるかについておよその数を取得するためにactiveCountメソッドを使用する場合があります。ただし、配列が小さすぎてすべてのスレッドを保持できない場合、余分なスレッドは通知なしに無視されます。 現在のスレッド・スレッド・グループおよびそのサブグループ内のすべてのライブ・スレッドを取得することが重要である場合、起動者は、返されるint値が厳密に
tarrayの長さより小さいことを確認する必要があります。このメソッドの本質的な競合条件のため、このメソッドはデバッグおよび監視目的にのみ使用することをお薦めします。
- パラメータ:
tarray- スレッドのリストの格納先である配列- 戻り値:
- 配列に格納されるスレッド数
- 例外:
SecurityException- 現在のスレッドがそのスレッド・グループにアクセスできないとThreadGroup.checkAccess()によって判定された場合
-
countStackFrames
@Deprecated(since="1.2", forRemoval=true) public int countStackFrames()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは、最初にスタック・フレーム数をカウントするように設計されていましたが、結果は明確に定義されておらず、スレッド機能に依存していました。 このメソッドは、Java SEの将来のバージョンで削除される可能性があります。UnsupportedOperationExceptionをスローします。- 戻り値:
- なし
- 関連項目:
-
join
public final void join(long millis) throws InterruptedException - 実装上のノート:
- プラットフォーム・スレッドの場合、実装では
this.isAliveで条件付けられたthis.waitコールのループを使用します。 スレッドが終了すると、this.notifyAllメソッドが呼び出されます。 アプリケーションでは、Threadインスタンスのwait、notify、またはnotifyAllを使用しないことをお薦めします。 - パラメータ:
millis- ミリ秒単位の待機時間- 例外:
IllegalArgumentException-millisの値が負の場合InterruptedException- 何らかのスレッドが現在のスレッドに割り込んだ場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。
-
join
public final void join(long millis, int nanos) throws InterruptedException このスレッドが終了するまで、最大millisミリ秒にnanosナノ秒を加えて待機します。 両方の引数が0の場合は、永続的に待機することを意味します。 このメソッドは、スレッドがstartedでない場合、待機せずにただちに返します。- 実装上のノート:
- プラットフォーム・スレッドの場合、実装では
this.isAliveで条件付けられたthis.waitコールのループを使用します。 スレッドが終了すると、this.notifyAllメソッドが呼び出されます。 アプリケーションでは、Threadインスタンスのwait、notify、またはnotifyAllを使用しないことをお薦めします。 - パラメータ:
millis- ミリ秒単位の待機時間nanos-0-999999追加で待機するナノ秒- 例外:
IllegalArgumentException-millisの値が負の場合、またはnanosの値が範囲0-999999に含まれない場合InterruptedException- 何らかのスレッドが現在のスレッドに割り込んだ場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。
-
join
public final void join() throws InterruptedException- 例外:
InterruptedException- 何らかのスレッドが現在のスレッドに割り込んだ場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。
-
join
public final boolean join(Duration duration) throws InterruptedException このスレッドが指定された待機時間まで終了するのを待機します。このメソッドは、待機期間がゼロ以下の場合は待機しません。 この場合、メソッドはスレッドが終了しているかどうかのみをテストします。
- パラメータ:
duration- 待機する最大期間- 戻り値:
- スレッドが終了している場合は
true、スレッドが終了していない場合はfalse - 例外:
InterruptedException- 待機中に現在のスレッドで割込みが発生した場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。IllegalThreadStateException- このスレッドが開始されていない場合。- 導入されたバージョン:
- 19
-
dumpStack
public static void dumpStack()現在のスレッドのスタック・トレースを標準エラー・ストリームに出力します。 このメソッドはデバッグに便利です。 -
setDaemon
public final void setDaemon(boolean on) このスレッドを「デーモン」または「非デーモン」スレッドとしてマークします。 「停止シーケンス」は、起動されたすべての非デーモン・スレッドが終了すると開始します。仮想スレッドのデーモン・ステータスは常に
trueであり、このメソッドでfalseに変更することはできません。このメソッドは、スレッド起動前に呼び出す必要があります。 スレッドが終了したときのこのメソッドの動作は指定されません。
- パラメータ:
on-trueの場合、このスレッドをデーモン・スレッドとしてマークする- 例外:
IllegalArgumentException- これが仮想スレッドで、onがfalseの場合IllegalThreadStateException- このスレッドが生存している場合SecurityException- 現在のスレッドがこのスレッドを変更できない場合とcheckAccess()によって判定された場合
-
isDaemon
public final boolean isDaemon()このスレッドがデーモン・スレッドであるかどうかを判定します。 仮想スレッドのデーモン・ステータスは常にtrueです。- 戻り値:
- このスレッドがデーモン・スレッドである場合は
true、そうでない場合はfalse。 - 関連項目:
-
checkAccess
@Deprecated(since="17", forRemoval=true) public final void checkAccess()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは、非推奨であり、今後のリリースで削除される可能性があります。「セキュリティ・マネージャ」と組み合わせて使用すると便利です。 そのため、このメソッドは非推奨であり、削除される可能性があります。 Security Managerまたはこのメソッドに置換はありません。現在実行中のスレッドが、このスレッドを変更するためのアクセス権を持っているかどうかを判定します。セキュリティ・マネージャが存在する場合は、
checkAccessメソッドがこのスレッドをその引数に指定して呼び出されます。 その結果、SecurityExceptionがスローされることがあります。- 例外:
SecurityException- 現在のスレッドがこのスレッドへのアクセスを許されていない場合。- 関連項目:
-
toString
public String toString()このスレッドの文字列表現を返します。 文字列表現には通常、スレッドidentifierおよび名前が含まれます。 プラットフォーム・スレッドのデフォルト実装には、スレッド識別子、名前、優先度およびスレッド・グループの名前が含まれます。 -
getContextClassLoader
public ClassLoader getContextClassLoader()このスレッドのコンテキストClassLoaderを返します。 コンテキストClassLoaderは、クラスおよびリソースのロード時にこのスレッドで実行されるコードで使用するためにスレッドの作成者が設定できます。 setでない場合、デフォルトでは親スレッドからコンテキスト・クラス・ローダーを継承します。基本スレッドのコンテキスト
ClassLoaderは、通常、アプリケーションをロードするために使用されるクラス・ローダーに設定されます。- 戻り値:
- このスレッドのコンテキスト
ClassLoader、またはシステム・クラス・ローダーを示すnull(それに失敗した場合、ブートストラップ・クラス・ローダー) - 例外:
SecurityException- セキュリティ・マネージャが存在し、呼び出し側クラス・ローダーがnullでなく、コンテキスト・クラス・ローダーと同じでも祖先でもなく、呼び出し元にRuntimePermission("getClassLoader")がない場合- 導入されたバージョン:
- 1.2
-
setContextClassLoader
public void setContextClassLoader(ClassLoader cl) このスレッドのコンテキストClassLoaderを設定します。コンテキスト
ClassLoaderは、クラスおよびリソースのロード時にこのスレッドで実行されるコードで使用するためにスレッドの作成者が設定できます。スレッドが「許可されません」PREVIEWの場合、スレッド・ローカル変数の独自のコピーを持つコンテキスト
ClassLoaderは設定できません。セキュリティ・マネージャが存在する場合、その
checkPermissionメソッドがRuntimePermission("setContextClassLoader")アクセス権で呼び出され、コンテキストClassLoaderの設定が許可されるか確認されます。- パラメータ:
cl- このThreadのコンテキストClassLoader、またはシステム・クラス・ローダーを示す(またはブートストラップ・クラス・ローダーの失敗を示す) null- 例外:
UnsupportedOperationException- このスレッドがスレッド・ローカル変数のコピーに値を設定できない場合SecurityException- 現在のスレッドがコンテキストClassLoaderを設定できない場合- 導入されたバージョン:
- 1.2
-
holdsLock
public static boolean holdsLock(Object obj) 現在のスレッドが指定されたオブジェクトのモニター・ロックを保持している場合にのみ、trueを返します。このメソッドは、次のように、プログラムが、現行スレッドが指定されたロックをすでに保持していることを示す際に使用されます。
assert Thread.holdsLock(obj);- パラメータ:
obj- 所有権のロックをテストするオブジェクト- 戻り値:
- 現在のスレッドが、指定されたオブジェクトのモニター・ロックを保持している場合、
true。 - 導入されたバージョン:
- 1.4
-
getStackTrace
public StackTraceElement[] getStackTrace()このスレッドのスタック・ダンプを表すスタック・トレース要素の配列を返します。 このスレッドが開始されていないか、開始済みだがまだシステムによって実行対象としてスケジュールされていないか、あるいは終了済みの場合、このメソッドから長さゼロの配列が返されます。 返された配列がゼロ以外の長さの配列である場合、配列の最初の要素はスタックの最上部を表します。これはシーケンスで呼び出されたもっとも新しいメソッドです。 配列の最後の要素は、スタックの底部を表します。これはシーケンスで呼び出されたもっとも古いメソッドです。セキュリティ・マネージャが存在し、このスレッドが現在のスレッドではない場合、セキュリティ・マネージャの
checkPermissionメソッドがRuntimePermission("getStackTrace")権限でコールされ、スタック・トレースを取得しても問題ないかどうかが確認されます。仮想マシンの中には、特定の状況下でスタック・トレースから1つ以上のスタック・フレームを省略するものがあります。 極端な場合、このスレッドに関するスタック・トレース情報を持たない仮想マシンが、このメソッドから長さゼロの配列を返すことが許可されます。
- 戻り値:
StackTraceElementの配列。それぞれが1つのスタック・フレームを表します。- 例外:
SecurityException- セキュリティ・マネージャが存在し、そのcheckPermissionメソッドでスレッドのスタック・トレースを取得できない場合。- 導入されたバージョン:
- 1.5
- 関連項目:
-
getAllStackTraces
public static Map<Thread,StackTraceElement[]> getAllStackTraces()すべてのライブ・プラットフォーム・スレッドのスタック・トレースのマップを返します。 マップに仮想スレッドは含まれません。 マップ・キーはスレッドで、各マップ値は、対応するThreadのスタック・ダンプを表すStackTraceElementの配列です。 返されるスタック・トレースのフォーマットは、getStackTraceメソッドで指定されたものとなります。このメソッドが呼び出されている間に、スレッドが実行されている可能性があります。 各スレッドのスタック・トレースは、スナップショットを表すだけです。各スタック・トレースは異なる時期に取得できます。 仮想マシンがスレッドに関するスタック・トレース情報を持たない場合、マップ値に長さゼロの配列が返されます。
セキュリティ・マネージャがある場合、セキュリティ・マネージャの
checkPermissionメソッドがRuntimePermission("getStackTrace")権限およびRuntimePermission("modifyThreadGroup")権限でコールされ、すべてのスレッドのスタック・トレースを取得できるかどうかが確認されます。- 戻り値:
Threadから、対応するスレッドのスタック・トレースを表すStackTraceElementの配列へのMap。- 例外:
SecurityException- セキュリティ・マネージャが存在し、そのcheckPermissionメソッドでスレッドのスタック・トレースを取得できない場合。- 導入されたバージョン:
- 1.5
- 関連項目:
-
getId
@Deprecated(since="19") public long getId()非推奨。このメソッドはfinalではなく、スレッドIDではない値を返すためにオーバーライドできます。 代わりにthreadId()を使用してください。このスレッドの識別子を返します。 スレッドIDは、このスレッドの作成時に生成される正のlong番号です。 スレッドIDは一意であり、その寿命を通じて変更されることはありません。- 戻り値:
- このスレッドのID
- 導入されたバージョン:
- 1.5
-
threadId
public final long threadId()このスレッドの識別子を返します。 スレッドIDは、このスレッドの作成時に生成される正のlong番号です。 スレッドIDは一意であり、その寿命を通じて変更されることはありません。- 戻り値:
- このスレッドのID
- 導入されたバージョン:
- 19
-
getState
public Thread.State getState()このスレッドの状態を返します。 このメソッドは、同期の制御用としてではなく、システム状態の監視用として設計されています。- 戻り値:
- このスレッドの状態。
- 導入されたバージョン:
- 1.5
-
setDefaultUncaughtExceptionHandler
public static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler ueh) キャッチされない例外により、スレッドが突然終了したときや、このスレッドに対してほかにハンドラが定義されていないときに呼び出されるデフォルトのハンドラを設定します。キャッチされない例外の扱いはスレッドによりまず制御され、次にスレッドの
ThreadGroupオブジェクトにより、最終的にはデフォルトのキャッチされない例外ハンドラにより制御されます。 スレッドに明示的な捕捉されない例外ハンドラ・セットがなく、スレッドのスレッド・グループ(親スレッド・グループを含む)がそのuncaughtExceptionメソッドの特殊化を行わない場合、デフォルト・ハンドラのuncaughtExceptionメソッドが呼び出されます。デフォルトのキャッチされない例外ハンドラを設定することで、アプリケーションでは、システムで提供された「デフォルト」の動作をすでに受け入れているスレッドのキャッチされない例外を扱う方法(特定のデバイスやファイルへのログインなど)を変更できます。
捕捉されないデフォルトの例外ハンドラは、通常、スレッドの
ThreadGroupオブジェクトに遅延しないようにしてください。これは、無限の再帰の原因となる可能性があるためです。- パラメータ:
ueh- デフォルトの捕捉されない例外ハンドラとして使用するオブジェクト。nullの場合、デフォルト・ハンドラはありません。- 例外:
SecurityException- セキュリティ・マネージャが存在し、RuntimePermission("setDefaultUncaughtExceptionHandler")を拒否した場合- 導入されたバージョン:
- 1.5
- 関連項目:
-
getDefaultUncaughtExceptionHandler
public static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()キャッチされない例外によりスレッドが突然終了したときに呼び出されるデフォルトのハンドラを返します。 戻り値がnullの場合、デフォルトはありません。- 戻り値:
- すべてのスレッド用のデフォルトのキャッチされない例外ハンドラ
- 導入されたバージョン:
- 1.5
- 関連項目:
-
getUncaughtExceptionHandler
public Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()キャッチされない例外によりスレッドが突然終了したときに呼び出されるハンドラを返します。 このスレッドに捕捉されない例外ハンドラが明示的に設定されていない場合、このスレッドが終了しないかぎり、このスレッドのThreadGroupオブジェクトが返されます。この場合、nullが返されます。- 戻り値:
- このスレッド用のキャッチされない例外ハンドラ
- 導入されたバージョン:
- 1.5
-
setUncaughtExceptionHandler
public void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler ueh) キャッチされない例外により、突然スレッドが終了したときに使用されるハンドラを設定します。キャッチされない例外ハンドラを明示的に設定することで、スレッドはキャッチされない例外を完全に制御できます。 そのようなハンドラが設定されていない場合、スレッドの
ThreadGroupオブジェクトはハンドラとして機能します。- パラメータ:
ueh- このスレッド捕捉されない例外ハンドラとして使用するオブジェクト。nullの場合、このスレッドには明示的なハンドラがありません。- 例外:
SecurityException- 現在のスレッドがこのスレッドの変更を許されていない場合。- 導入されたバージョン:
- 1.5
- 関連項目:
-