- すべての実装されたインタフェース:
- Runnable
- 直系の既知のサブクラス:
- ForkJoinWorkerThread
 Threadは、スレッドを作成するためのコンストラクタおよびThread.Builderを定義します。 「開始中」は、スレッドがrunメソッドを実行するようにスケジュールします。 新しく起動されたスレッドは、起動の原因となったスレッドと同時に実行されます。 
 
 スレッド「終了」は、そのrunメソッドが正常に完了した場合、またはそのrunメソッドが突然完了し、適切な「捕捉されない例外ハンドラ」が正常に完了または突然完了した場合です。 実行するコードが残っていないため、スレッドは実行を完了しました。 joinメソッドを使用すると、スレッドが終了するのを待機できます。 
 
 スレッドには、一意のidentifierおよびnameがあります。 識別子は、Threadの作成時に生成され、変更できません。 スレッド名は、スレッドの作成時に指定することも、後で「変更済」にすることもできます。 
 
 スレッドはThreadLocal変数をサポートします。 スレッドに対してローカルな変数です。つまり、スレッドは、他のスレッドによって設定された値とは無関係な値に設定された変数のコピーを持つことができます。 Threadでは、親Threadからスレッド作成時に継承されるスレッド・ローカル変数であるInheritableThreadLocal変数もサポートされます。 Threadは、スレッド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.Builder 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を使用する場合、inheritInheritableThreadLocalsメソッドを使用して初期値を継承するかどうかを選択できます。 
 プラットフォーム・スレッドは、デーモンのステータス、スレッド優先度、および(またはセキュリティ・マネージャによって選択されていない)が指定されていない場合、スレッド・グループを継承します。
 プラットフォーム・スレッド「取得」を作成して、「特権アクション」を実行するコードを実行するときに新しいスレッドの「権限」を制限します。 取得されたコール元コンテキストは新しいスレッド「継承されたAccessControlContext」です。 仮想スレッドを作成しても、呼び出し元のコンテキストは取得されません。特権アクションを実行するコードを実行するとき、仮想スレッドにはアクセス権がありません。 
 
 特に指定しないかぎり、このクラスのコンストラクタまたはメソッドにnull引数を渡すと、NullPointerExceptionがスローされます。
- 実装上のノート:
- JDKリファレンス実装では、仮想スレッド・スケジューラは次のシステム・プロパティで構成できます:
 システム・プロパティ 説明 jdk.virtualThreadScheduler.parallelism仮想スレッドのスケジューリングに使用できるプラットフォーム・スレッドの数。 デフォルトで使用可能なプロセッサの数です。 jdk.virtualThreadScheduler.maxPoolSizeスケジューラで使用可能なプラットフォーム・スレッドの最大数。 デフォルトは256です。 
- 導入されたバージョン:
- 1.0
- 
ネストされたクラスのサマリーネストされたクラス修飾子と型クラス説明static interfaceThreadおよび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 booleanこのスレッドが仮想スレッドである場合は、trueを返します。final voidjoin()このスレッドが終了するまで待機します。final voidjoin(long millis) このスレッドが終了するまで最大millisミリ秒待機します。final voidjoin(long millis, int nanos) このスレッドが終了するまで、最大millisミリ秒にnanosナノ秒を加えて待機します。final booleanこのスレッドが指定された待機時間まで終了するのを待機します。static Thread.Builder.OfPlatformプラットフォーム・スレッドを作成するプラットフォームThreadまたはThreadFactoryを作成するためのビルダーを返します。static Thread.Builder.OfVirtual仮想スレッドを作成する仮想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) タスクを実行するための仮想スレッドを作成し、実行するようにスケジュールします。final voidstop()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは元々、被害者スレッドがThreadDeathをスローするようにして、被害者スレッドを"停止"に指定されました。final voidsuspend()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは、最初にスレッドを一時停止するように指定されました。final longthreadId()このスレッドの識別子を返します。toString()このスレッドの文字列表現を返します。static voidyield()現在のスレッドが現在のプロセッサ使用量を譲る用意があることを示す、スケジューラへのヒントです。
- 
フィールド詳細- 
MIN_PRIORITYpublic static final int MIN_PRIORITYスレッドに設定できる最低優先順位です。- 関連項目:
 
- 
NORM_PRIORITYpublic static final int NORM_PRIORITYスレッドに割り当てられるデフォルトの優先順位です。- 関連項目:
 
- 
MAX_PRIORITYpublic static final int MAX_PRIORITYスレッドに設定できる最高優先順位です。- 関連項目:
 
 
- 
- 
コンストラクタの詳細- 
Threadpublic Thread()新しいプラットフォームThreadを初期化します。 このコンストラクタは、Thread(null, null, gname)(gnameは新たに生成される名前)と同じ効果を持ちます。 自動的に作成される名前は、nを整数とすると"Thread-"+nの形式を取ります。このコンストラクタは、 Threadを拡張してrun()メソッドをオーバーライドする場合にのみ役立ちます。- 関連項目:
 
- 
Threadpublic Thread(Runnable task) 新しいプラットフォームThreadを初期化します。 このコンストラクタは、Thread(null, task, gname)と同じ効果を持ちます。ここで、gnameは新しく生成された名前です。 自動的に作成される名前は、nを整数とすると"Thread-"+nの形式を取ります。NULL以外のタスクの場合、このコンストラクタを直接呼び出すことは、次のようになります: Thread.ofPlatform().unstarted(task);- パラメータ:
- task- このスレッドの開始時に- runメソッドが呼び出されるオブジェクト。- nullの場合、このクラスの- runメソッドは何も行わない。
- 関連項目:
 
- 
Threadpublic Thread(ThreadGroup group, Runnable task) 新しいプラットフォームThreadを初期化します。 このコンストラクタは、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- 現在のスレッドが、指定されたスレッド・グループ内のスレッドを作成できない場合
- 関連項目:
 
- 
Threadpublic Thread(String name) 新しいプラットフォームThreadを初期化します。 このコンストラクタは、Thread(null, null, name)と同じ効果を持ちます。このコンストラクタは、 Threadを拡張してrun()メソッドをオーバーライドする場合にのみ役立ちます。- パラメータ:
- name- 新しいスレッドの名前
- 関連項目:
 
- 
Threadpublic 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- 新しいスレッドの名前
- 関連項目:
 
- 
Threadpublic 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- 現在のスレッドが、指定されたスレッド・グループ内にスレッドを作成できない、またはコンテキスト・クラス・ローダーのメソッドをオーバーライドできない場合。
- 関連項目:
 
- 
Threadpublic 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
- 関連項目:
 
- 
Threadpublic 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- 新しいスレッドに必要なスタック・サイズ、またはこのパラメータが無視されることを示す0
- inheritInheritableThreadLocals-- trueの場合、構造化スレッドから継承可能なスレッド・ロケールの初期値を継承します。それ以外の場合、初期値は継承されません
- スロー:
- SecurityException- 現在のスレッドが、指定されたスレッド・グループ内のスレッドを作成できない場合
- 導入されたバージョン:
- 9
- 関連項目:
 
 
- 
- 
メソッドの詳細- 
currentThreadpublic static Thread currentThread()現在のスレッドのThreadオブジェクトを返します。- 戻り値:
- 現在のスレッド
 
- 
yieldpublic static void yield()現在のスレッドが現在のプロセッサ使用量を譲る用意があることを示す、スケジューラへのヒントです。 スケジューラはこのヒントを無視してもかまいません。譲位は、通常であればCPUを過剰に使用してしまうスレッド間で相対的な進行状況を改善しようとするヒューリスティックな試みです。 その使用時には詳細なプロファイルやベンチマークも組み合わせることで、目的の効果が実際に得られていることを確認すべきです。 このメソッドを使用する機会はまれにしかありません。 これは、デバッグ目的やテスト目的で役立つ可能性があります(競合状態によるバグを再現するのに役立つ可能性がある)。 これは、並行制御の構成要素( java.util.concurrent.locksパッケージ内の構成要素など)を設計する際にも役立つ可能性があります。
- 
sleeppublic static void sleep(long millis) throws InterruptedException システム・タイマーとスケジューラが正確であることを前提として、現在実行中のスレッドを、指定されたミリ秒数の間、スリープ(一時的に実行を停止)させます。 スレッドはモニターの所有権を失いません。- パラメータ:
- millis- ミリ秒単位のスリープ時間の長さ
- スロー:
- IllegalArgumentException-- millisの値が負の場合
- InterruptedException- 何らかのスレッドが現在のスレッドに割り込んだ場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。
 
- 
sleeppublic static void sleep(long millis, int nanos) throws InterruptedException システム・タイマーとスケジューラが正確であることを前提として、現在実行中のスレッドを、指定されたミリ秒数に指定されたナノ秒数を加算した間、スリープ(一時的に実行を停止)させます。 スレッドはモニターの所有権を失いません。- パラメータ:
- millis- ミリ秒単位のスリープ時間の長さ
- nanos-- 0-999999追加でスリープするナノ秒
- スロー:
- IllegalArgumentException-- millisの値が負の場合、または- nanosの値が範囲- 0-999999に含まれない場合
- InterruptedException- 何らかのスレッドが現在のスレッドに割り込んだ場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。
 
- 
sleeppublic static void sleep(Duration duration) throws InterruptedException 現在実行中のスレッドが、システム・タイマーおよびスケジューラの精度および精度に従って、指定された期間(一時停止実行)をスリープします。 期間がnegativeの場合、このメソッドはno-opです。- パラメータ:
- duration- 睡眠時間
- スロー:
- InterruptedException- 現在のスレッドがスリープ中に中断された場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。
- 導入されたバージョン:
- 19
 
- 
onSpinWaitpublic 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
 
- 
ofPlatformpublic static Thread.Builder.OfPlatform ofPlatform()プラットフォーム・スレッドを作成するプラットフォームThreadまたはThreadFactoryを作成するためのビルダーを返します。プラットフォーム・スレッド作成時のセキュリティ・マネージャとの相互作用 セキュリティ・マネージャ・セットがあるときにプラットフォーム・スレッドを作成すると、スレッド・グループを使用してセキュリティ・マネージャの checkAccess(ThreadGroup)メソッドが起動されます。 スレッド・グループがOfPlatform.groupメソッドで設定されていない場合、まずセキュリティ・マネージャの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オブジェクトを作成するためのビルダー。
- 導入されたバージョン:
- 21
 
- 
ofVirtualpublic static Thread.Builder.OfVirtual ofVirtual()仮想スレッドを作成する仮想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オブジェクトを作成するためのビルダー。
- 導入されたバージョン:
- 21
 
- 
cloneprotected Object clone() throws CloneNotSupportedExceptionThreadを意味のあるかたちで複製することは不可能なため、CloneNotSupportedExceptionをスローします。 代わりに新しいThreadを構築します。- オーバーライド:
- clone、クラス- Object
- 戻り値:
- このインスタンスの複製。
- スロー:
- CloneNotSupportedException- 常時
- 関連項目:
 
- 
startVirtualThreadタスクを実行するための仮想スレッドを作成し、実行するようにスケジュールします。このメソッドは、次と同等です。 Thread.ofVirtual().start(task);- パラメータ:
- task- スレッドの実行時に実行するオブジェクト
- 戻り値:
- 新しい起動された仮想スレッド
- 導入されたバージョン:
- 21
- 関連項目:
 
- 
isVirtualpublic final boolean isVirtual()このスレッドが仮想スレッドである場合は、trueを返します。 仮想スレッドは、オペレーティング・システムではなくJava仮想マシンによってスケジュールされます。- 戻り値:
- このスレッドが仮想スレッドの場合はtrue
- 導入されたバージョン:
- 21
 
- 
startpublic void start()実行を開始するようにこのスレッドをスケジュールします。 スレッドは現在のスレッドとは独立して実行されます。スレッドは一度に開始できます。 特に、スレッドは終了後に再起動することはできません。 - スロー:
- IllegalThreadStateException- スレッドがすでに起動していた場合
 
- 
runpublic 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- 常時
 
- 
interruptpublic 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- 現在のスレッドがこのスレッドを変更できない場合
 
- 
interruptedpublic static boolean interrupted()現在のスレッドが割り込まれているかどうかを調べします。 このメソッドによりスレッドの割込みステータスがクリアされます。 つまり、このメソッドが続けて2回呼び出された場合、2回目の呼出しはfalseを返します(最初の呼出しが割込みステータスをクリアしたあとで、2番目の呼出しがそれを確認する前に現在のスレッドがもう一度割り込まれた場合を除く)。- 戻り値:
- 現在のスレッドが割り込まれている場合はtrue、そうでない場合はfalse。
- 関連項目:
 
- 
isInterruptedpublic boolean isInterrupted()このスレッドが割り込まれているどうかを調べます。 このメソッドによってスレッドの割込みステータスが影響を受けることはありません。- 戻り値:
- このスレッドが割り込まれている場合はtrue、そうでない場合はfalse。
- 関連項目:
 
- 
isAlivepublic 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- 常時
 
- 
setPrioritypublic final void setPriority(int newPriority) このスレッドの優先順位を変更します。 プラットフォーム・スレッドの場合、優先度は指定されたnewPriorityの小さい方に設定され、スレッド「スレッド・グループ」の最大許容優先度に設定されます。 仮想スレッドの優先度は常にNORM_PRIORITYで、newPriorityは無視されます。- パラメータ:
- newPriority- 新しいスレッド優先度
- スロー:
- IllegalArgumentException- 優先度が- MIN_PRIORITYから- MAX_PRIORITYの範囲内にない場合。
- SecurityException- 現在のスレッドがこのスレッドを変更できない場合と- checkAccess()によって判定された場合
- 関連項目:
 
- 
getPrioritypublic final int getPriority()このスレッドの優先順位を返します。仮想スレッドの優先度は常に NORM_PRIORITYです。- 戻り値:
- このスレッドの優先順位。
- 関連項目:
 
- 
setNamepublic final void setName(String name) このスレッドの名前を引数nameに等しくなるように変更します。まず、このスレッドの checkAccessメソッドが、引数なしで呼び出されます。 その結果、SecurityExceptionがスローされることがあります。- 実装上のノート:
- JDKリファレンス実装で、このスレッドが現在のスレッドであり、Java Native Interface AttachCurrentThread関数を使用してVMにアタッチされなかったプラットフォーム・スレッドである場合、このメソッドはオペレーティング・システムのスレッド名を設定します。 これはデバッグやトラブルシューティングに役立ちます。
- パラメータ:
- name- このスレッドの新しい名前。
- スロー:
- SecurityException- 現在のスレッドがこのスレッドを変更できない場合。
- 外部仕様
- 関連項目:
 
- 
getNamepublic final String getName()このスレッドの名前を返します。- 戻り値:
- このスレッドの名前。
- 関連項目:
 
- 
getThreadGrouppublic final ThreadGroup getThreadGroup()スレッド・スレッド・グループまたはnullを返します(スレッドが終了している場合)。仮想スレッドに対して返されるスレッド・グループは、特別な「仮想スレッドの場合はThreadGroup」です。 - 戻り値:
- このスレッド・グループまたはnull
 
- 
activeCountpublic static int activeCount()現在のスレッド・グループおよびそのサブグループ内のliveプラットフォーム・スレッド数の見積りを返します。 仮想スレッドは見積りに含まれていません。返される値は単なる推定値ですが、それは、このメソッドが内部のデータ構造体をトラバースしている間にスレッド数が動的に変化する可能性があるほか、特定のシステム・スレッドの存在の影響を受ける可能性もあるからです。 このメソッドは主に、デバッグおよび監視目的のためのものです。 - 戻り値:
- 現在のスレッド・スレッド・グループおよび現在のスレッド・グループを祖先とするその他のスレッド・グループのライブ・プラットフォーム・スレッド数の見積り
 
- 
enumeratepublic 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をスローします。- 戻り値:
- なし
- 関連項目:
 
- 
joinpublic final void join(long millis) throws InterruptedException - 実装上のノート:
- プラットフォーム・スレッドの場合、実装ではthis.isAliveで条件付けられたthis.waitコールのループを使用します。 スレッドが終了すると、this.notifyAllメソッドが呼び出されます。 アプリケーションでは、Threadインスタンスのwait、notify、またはnotifyAllを使用しないことをお薦めします。
- パラメータ:
- millis- ミリ秒単位の待機時間
- スロー:
- IllegalArgumentException-- millisの値が負の場合
- InterruptedException- 何らかのスレッドが現在のスレッドに割り込んだ場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。
 
- 
joinpublic 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- 何らかのスレッドが現在のスレッドに割り込んだ場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。
 
- 
joinpublic final void join() throws InterruptedException- スロー:
- InterruptedException- 何らかのスレッドが現在のスレッドに割り込んだ場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。
 
- 
joinpublic final boolean join(Duration duration) throws InterruptedException このスレッドが指定された待機時間まで終了するのを待機します。このメソッドは、待機期間がゼロ以下の場合は待機しません。 この場合、メソッドはスレッドが終了しているかどうかのみをテストします。 - パラメータ:
- duration- 待機する最大期間
- 戻り値:
- スレッドが終了している場合はtrue、スレッドが終了していない場合はfalse
- スロー:
- InterruptedException- 待機中に現在のスレッドで割込みが発生した場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。
- IllegalThreadStateException- このスレッドが開始されていない場合。
- 導入されたバージョン:
- 19
 
- 
dumpStackpublic static void dumpStack()現在のスレッドのスタック・トレースを標準エラー・ストリームに出力します。 このメソッドはデバッグに便利です。
- 
setDaemonpublic final void setDaemon(boolean on) このスレッドを「デーモン」または「非デーモン」スレッドとしてマークします。 「停止シーケンス」は、起動されたすべての非デーモン・スレッドが終了すると開始します。仮想スレッドのデーモン・ステータスは常に trueであり、このメソッドでfalseに変更することはできません。このメソッドは、スレッド起動前に呼び出す必要があります。 スレッドが終了したときのこのメソッドの動作は指定されません。 - パラメータ:
- on-- trueの場合、このスレッドをデーモン・スレッドとしてマークする
- スロー:
- IllegalArgumentException- これが仮想スレッドで、- onがfalseの場合
- IllegalThreadStateException- このスレッドが生存している場合
- SecurityException- 現在のスレッドがこのスレッドを変更できない場合と- checkAccess()によって判定された場合
 
- 
isDaemonpublic final boolean isDaemon()このスレッドがデーモン・スレッドであるかどうかを判定します。 仮想スレッドのデーモン・ステータスは常にtrueです。- 戻り値:
- このスレッドがデーモン・スレッドである場合はtrue、そうでない場合はfalse。
- 関連項目:
 
- 
checkAccess@Deprecated(since="17", forRemoval=true) public final void checkAccess()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このメソッドは、非推奨であり、今後のリリースで削除される可能性があります。「セキュリティ・マネージャ」と組み合わせて使用すると便利です。 そのため、このメソッドは非推奨であり、削除される可能性があります。 Security Managerまたはこのメソッドに置換はありません。現在実行中のスレッドが、このスレッドを変更するためのアクセス権を持っているかどうかを判定します。セキュリティ・マネージャが存在する場合は、 checkAccessメソッドがこのスレッドをその引数に指定して呼び出されます。 その結果、SecurityExceptionがスローされることがあります。- スロー:
- SecurityException- 現在のスレッドがこのスレッドへのアクセスを許されていない場合。
- 関連項目:
 
- 
toStringpublic String toString()このスレッドの文字列表現を返します。 文字列表現には通常、スレッドidentifierおよび名前が含まれます。 プラットフォーム・スレッドのデフォルト実装には、スレッド識別子、名前、優先度およびスレッド・グループの名前が含まれます。
- 
getContextClassLoaderpublic ClassLoader getContextClassLoader()このスレッドのコンテキストClassLoaderを返します。 コンテキストClassLoaderは、クラスおよびリソースのロード時にこのスレッドで実行されるコードで使用するためにスレッドの作成者が設定できます。 setでない場合、デフォルトでは親スレッドからコンテキスト・クラス・ローダーを継承します。初期スレッドのコンテキスト ClassLoaderは、通常、アプリケーションのロードに使用されるクラス・ローダーに設定されます。- 戻り値:
- このスレッドのコンテキストClassLoader、またはシステム・クラス・ローダー(または、これに失敗すると、ブートストラップ・クラス・ローダー)を示すnull
- スロー:
- SecurityException- セキュリティ・マネージャが存在し、呼出し元のクラス・ローダーが- nullではなく、コンテキスト・クラス・ローダーと同じでも祖先でもなく、呼出し元に- RuntimePermission- ("getClassLoader")がない場合
- 導入されたバージョン:
- 1.2
 
- 
setContextClassLoaderpublic void setContextClassLoader(ClassLoader cl) このスレッドのコンテキストClassLoaderを設定します。コンテキスト ClassLoaderは、クラスおよびリソースのロード時にこのスレッドで実行されるコードで使用するためにスレッドの作成者が設定できます。セキュリティ・マネージャが存在する場合、その checkPermissionメソッドがRuntimePermission("setContextClassLoader")アクセス権で呼び出され、コンテキストClassLoaderの設定が許可されるか確認されます。- パラメータ:
- cl- このThreadのコンテキストClassLoader、またはシステム・クラス・ローダーを示す(またはブートストラップ・クラス・ローダーの失敗を示す) null
- スロー:
- SecurityException- 現在のスレッドがコンテキストClassLoaderを設定できない場合
- 導入されたバージョン:
- 1.2
 
- 
holdsLockpublic static boolean holdsLock(Object obj) 現在のスレッドが指定されたオブジェクトのモニター・ロックを保持している場合にのみ、trueを返します。このメソッドは、次のように、プログラムが、現行スレッドが指定されたロックをすでに保持していることを示す際に使用されます。 assert Thread.holdsLock(obj);- パラメータ:
- obj- 所有権のロックをテストするオブジェクト
- 戻り値:
- 現在のスレッドが、指定されたオブジェクトのモニター・ロックを保持している場合、true。
- 導入されたバージョン:
- 1.4
 
- 
getStackTracepublic StackTraceElement[] getStackTrace()このスレッドのスタック・ダンプを表すスタック・トレース要素の配列を返します。 このスレッドが開始されていないか、開始済みだがまだシステムによって実行対象としてスケジュールされていないか、あるいは終了済みの場合、このメソッドから長さゼロの配列が返されます。 返された配列がゼロ以外の長さの配列である場合、配列の最初の要素はスタックの最上部を表します。これはシーケンスで呼び出されたもっとも新しいメソッドです。 配列の最後の要素は、スタックの底部を表します。これはシーケンスで呼び出されたもっとも古いメソッドです。セキュリティ・マネージャが存在し、このスレッドが現在のスレッドではない場合、セキュリティ・マネージャの checkPermissionメソッドがRuntimePermission("getStackTrace")権限でコールされ、スタック・トレースを取得しても問題ないかどうかが確認されます。仮想マシンの中には、特定の状況下でスタック・トレースから1つ以上のスタック・フレームを省略するものがあります。 極端な場合、このスレッドに関するスタック・トレース情報を持たない仮想マシンが、このメソッドから長さゼロの配列を返すことが許可されます。 - 戻り値:
- StackTraceElementの配列。それぞれが1つのスタック・フレームを表します。
- スロー:
- SecurityException- セキュリティ・マネージャが存在し、その- checkPermissionメソッドでスレッドのスタック・トレースを取得できない場合。
- 導入されたバージョン:
- 1.5
- 関連項目:
 
- 
getAllStackTracespublic 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
 
- 
threadIdpublic final long threadId()このスレッドの識別子を返します。 スレッドIDは、このスレッドの作成時に生成される正のlong番号です。 スレッドIDは一意であり、その寿命を通じて変更されることはありません。- 戻り値:
- このスレッドのID
- 導入されたバージョン:
- 19
 
- 
getStatepublic Thread.State getState()このスレッドの状態を返します。 このメソッドは、同期の制御用としてではなく、システム状態の監視用として設計されています。- 戻り値:
- このスレッドの状態。
- 導入されたバージョン:
- 1.5
 
- 
setDefaultUncaughtExceptionHandlerpublic static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler ueh) キャッチされない例外により、スレッドが突然終了したときや、このスレッドに対してほかにハンドラが定義されていないときに呼び出されるデフォルトのハンドラを設定します。キャッチされない例外の扱いはスレッドによりまず制御され、次にスレッドの ThreadGroupオブジェクトにより、最終的にはデフォルトのキャッチされない例外ハンドラにより制御されます。 スレッドに明示的な捕捉されない例外ハンドラ・セットがなく、スレッドのスレッド・グループ(親スレッド・グループを含む)がそのuncaughtExceptionメソッドの特殊化を行わない場合、デフォルト・ハンドラのuncaughtExceptionメソッドが呼び出されます。デフォルトのキャッチされない例外ハンドラを設定することで、アプリケーションでは、システムで提供された「デフォルト」の動作をすでに受け入れているスレッドのキャッチされない例外を扱う方法(特定のデバイスやファイルへのログインなど)を変更できます。 捕捉されないデフォルトの例外ハンドラは、通常、スレッドの ThreadGroupオブジェクトに遅延しないようにしてください。これは、無限の再帰の原因となる可能性があるためです。- パラメータ:
- ueh- デフォルトの捕捉されない例外ハンドラとして使用するオブジェクト。- nullの場合、デフォルト・ハンドラはありません。
- スロー:
- SecurityException- セキュリティ・マネージャが存在し、- RuntimePermission- ("setDefaultUncaughtExceptionHandler")を拒否する場合
- 導入されたバージョン:
- 1.5
- 関連項目:
 
- 
getDefaultUncaughtExceptionHandlerpublic static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()キャッチされない例外によりスレッドが突然終了したときに呼び出されるデフォルトのハンドラを返します。 戻り値がnullの場合、デフォルトはありません。- 戻り値:
- すべてのスレッド用のデフォルトのキャッチされない例外ハンドラ
- 導入されたバージョン:
- 1.5
- 関連項目:
 
- 
getUncaughtExceptionHandlerpublic Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()キャッチされない例外によりスレッドが突然終了したときに呼び出されるハンドラを返します。 このスレッドに捕捉されない例外ハンドラが明示的に設定されていない場合、このスレッドが終了しないかぎり、このスレッドのThreadGroupオブジェクトが返されます。この場合、nullが返されます。- 戻り値:
- このスレッド用のキャッチされない例外ハンドラ
- 導入されたバージョン:
- 1.5
 
- 
setUncaughtExceptionHandlerpublic void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler ueh) キャッチされない例外により、突然スレッドが終了したときに使用されるハンドラを設定します。キャッチされない例外ハンドラを明示的に設定することで、スレッドはキャッチされない例外を完全に制御できます。 そのようなハンドラが設定されていない場合、スレッドの ThreadGroupオブジェクトはハンドラとして機能します。- パラメータ:
- ueh- このスレッド捕捉されない例外ハンドラとして使用するオブジェクト。- nullの場合、このスレッドには明示的なハンドラがありません。
- スロー:
- SecurityException- 現在のスレッドがこのスレッドの変更を許されていない場合。
- 導入されたバージョン:
- 1.5
- 関連項目:
 
 
-