モジュール java.base
パッケージ java.lang

クラスThread

java.lang.Object
java.lang.Thread
すべての実装されたインタフェース:
Runnable
直系の既知のサブクラス:
ForkJoinWorkerThread

public class Thread extends Object implements Runnable
スレッドとは、プログラム内での実行スレッドのことです。 Java仮想マシンを使用すると、1つのアプリケーションで複数のスレッドの実行を同時に実行できます。

Threadはコンストラクタを定義し、Runnableタスクを実行するスレッドを作成するためのThread.BuilderPREVIEWを定義します。 「開始中」スレッドは、起動の原因となったスレッドと同時に実行するようにスケジュールします。 新しく起動されたスレッドは、タスクのrunメソッドを起動します。 スレッドは、スレッドが終了するまで待機するjoinメソッドを定義します。

スレッドには、一意のidentifierおよびnameがあります。 識別子は、Threadの作成時に生成され、変更できません。 スレッド名は、スレッドの作成時に指定することも、後で「変更済」にすることもできます。

スレッドはThreadLocal変数をサポートします。 スレッドに対してローカルな変数です。つまり、スレッドは、他のスレッドによって設定された値とは無関係な値に設定された変数のコピーを持つことができます。 スレッドでは、親スレッドからのスレッド作成時に継承されるスレッド・ローカル変数であるInheritableThreadLocal変数もサポートされます。 スレッドは、スレッドcontext-class-loader特別な継承可能なスレッドをサポートします。

プラットフォーム・スレッド

Threadでは、通常、オペレーティング・システムによってスケジュールされたカーネル・スレッドに1:1でマップされる「プラットフォーム・スレッド」の作成がサポートされています。 通常、プラットフォーム・スレッドには、オペレーティング・システムによって保守される大きなスタックおよびその他のリソースがあります。 プラットフォームのスレッドは、すべてのタイプのタスクの実行に適していますが、リソースは限られています。

プラットフォーム・スレッドは、デフォルトで自動的に生成されたスレッド名を取得します。

プラットフォーム・スレッドは、「デーモン」または「非デーモン」スレッドに指定されています。 Java仮想マシンが起動すると、通常、非デーモン・スレッド(通常はアプリケーションのmainメソッドをコールするスレッド)が1つあります。 Java仮想マシンは、起動されたすべての非デーモン・スレッドが終了すると終了します。 起動されていない非デーモン・スレッドは、Java仮想マシンの終了を妨げません。 Java仮想マシンは、Runtime.exit(int)メソッドを起動して終了することもできます。この場合、デーモン以外のスレッドがまだ実行されていても終了します。

デーモンのステータスに加えて、プラットフォーム・スレッドには「スレッドの優先順位」があり、「スレッド・グループ」のメンバーです。

仮想スレッド

Threadでは、「仮想スレッド」の作成もサポートされています。 仮想スレッドは通常、オペレーティング・システムではなくJavaランタイムによってスケジュールされる「ユーザー・モード・スレッド」です。 仮想スレッドでは通常、必要なリソースはほとんどなく、単一のJava仮想マシンで数百万の仮想スレッドがサポートされる場合があります。 仮想スレッドは、ほとんどの時間をブロックしてI/O演算の完了を待機するタスクの実行に適しています。 仮想スレッドは、長時間実行するCPU集中型の演算を目的としていません。

仮想スレッドは通常、「キャリア・スレッド」として使用される小さなプラットフォーム・スレッド・セットを使用します。 ロックおよびI/O演算は、ある仮想スレッドから別の仮想スレッドにキャリア・スレッドを再スケジュールできる演算の例です。 仮想スレッドで実行されているコードは、基になるキャリア・スレッドを認識しません。 「現在のスレッド」への参照を取得するために使用されるcurrentThread()メソッドは、常に仮想スレッドのThreadオブジェクトを返します。

仮想スレッドにはデフォルトでスレッド名がありません。 スレッド名が設定されていない場合、getNameメソッドは空の文字列を返します。

仮想スレッドはデーモン・スレッドであるため、Java仮想マシンが終了しないようにしてください。 仮想スレッドには、変更できない固定「スレッドの優先順位」があります。

スレッドの作成および開始

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 interface 
    Preview.
    ThreadおよびThreadFactoryオブジェクトのビルダー。
    static enum 
    スレッドの状態です。
    static interface 
    キャッチされない例外により、Threadが突然終了したときに呼び出されるのハンドラのインタフェースです。
  • フィールドのサマリー

    フィールド
    修飾子と型
    フィールド
    説明
    static final int
    スレッドに設定できる最高優先順位です。
    static final int
    スレッドに設定できる最低優先順位です。
    static final int
    スレッドに割り当てられるデフォルトの優先順位です。
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    新しいプラットフォームThreadを初期化します。
    新しいプラットフォームThreadを初期化します。
    Thread(Runnable task, String name)
    新しいプラットフォームThreadを初期化します。
    Thread(String name)
    新しいプラットフォーム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を持ち、inheritThreadLocalstrueの場合に「継承可能なスレッド・ローカル」変数の初期値を継承します。
    Thread(ThreadGroup group, String name)
    新しいプラットフォームThreadを初期化します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    static int
    現在のスレッド・グループおよびそのサブグループ内のliveプラットフォーム・スレッド数の見積りを返します。
    final void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    このメソッドは、非推奨であり、今後のリリースで削除される可能性があります。「セキュリティ・マネージャ」と組み合わせて使用すると便利です。
    protected Object
    Threadを意味のあるかたちで複製することは不可能なため、CloneNotSupportedExceptionをスローします。
    int
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    このメソッドは、最初にスタック・フレーム数をカウントするように設計されていましたが、結果は明確に定義されておらず、スレッド機能に依存していました。
    static Thread
    現在のスレッドのThreadオブジェクトを返します。
    static void
    現在のスレッドのスタック・トレースを標準エラー・ストリームに出力します。
    static int
    enumerate(Thread[] tarray)
    指定された配列に、現在のスレッド・グループおよびそのサブグループ内のすべてのliveプラットフォーム・スレッドをコピーします。
    すべてのライブ・プラットフォーム・スレッドのスタック・トレースのマップを返します。
    このスレッドのコンテキストClassLoaderを返します。
    キャッチされない例外によりスレッドが突然終了したときに呼び出されるデフォルトのハンドラを返します。
    long
    非推奨。
    このメソッドはfinalではなく、スレッドIDではない値を返すためにオーバーライドできます。
    final String
    このスレッドの名前を返します。
    final int
    このスレッドの優先順位を返します。
    このスレッドのスタック・ダンプを表すスタック・トレース要素の配列を返します。
    このスレッドの状態を返します。
    スレッド・スレッド・グループまたはnullを返します(スレッドが終了している場合)。
    キャッチされない例外によりスレッドが突然終了したときに呼び出されるハンドラを返します。
    static boolean
    現行スレッドが指定されたオブジェクトに対するモニター・ロックを保持する場合にのみ、trueを返します。
    void
    このスレッドに割り込みます。
    static boolean
    現在のスレッドが割り込まれているかどうかを調べします。
    final boolean
    このスレッドが生存しているかどうかを判定します。
    final boolean
    このスレッドがデーモン・スレッドであるかどうかを判定します。
    boolean
    このスレッドが割り込まれているどうかを調べます。
    final boolean
    Preview.
    このスレッドが仮想スレッドである場合は、trueを返します。
    final void
    このスレッドが終了するまで待機します。
    final void
    join(long millis)
    このスレッドが終了するまで最大millisミリ秒待機します。
    final void
    join(long millis, int nanos)
    このスレッドが終了するまで、最大millisミリ秒にnanosナノ秒を加えて待機します。
    final boolean
    join(Duration duration)
    このスレッドが指定された待機時間まで終了するのを待機します。
    Preview.
    プラットフォーム・スレッドを作成するプラットフォームThreadまたはThreadFactoryを作成するためのビルダーを返します。
    Preview.
    仮想スレッドを作成する仮想ThreadまたはThreadFactoryを作成するためのビルダーを返します。
    static void
    他のアクティビティの一部で1つ以上のアクションが発生するまで、発信者が瞬間的に進行できないことを示します。
    final void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    このメソッドはsuspend()とともに使用するためにのみ存在しますが、これはデッドロックを発生させやすいため推奨されていません。
    void
    run()
    このメソッドは、実行時にスレッドによって実行されます。
    void
    このスレッドのコンテキストClassLoaderを設定します。
    final void
    setDaemon(boolean on)
    このスレッドを「デーモン」または「非デーモン」スレッドとしてマークします。
    static void
    キャッチされない例外により、スレッドが突然終了したときや、このスレッドに対してほかにハンドラが定義されていないときに呼び出されるデフォルトのハンドラを設定します。
    final void
    このスレッドの名前を引数nameに等しくなるように変更します。
    final void
    setPriority(int newPriority)
    このスレッドの優先順位を変更します。
    void
    キャッチされない例外により、突然スレッドが終了したときに使用されるハンドラを設定します。
    static void
    sleep(long millis)
    システム・タイマーとスケジューラが正確であることを前提として、現在実行中のスレッドを、指定されたミリ秒数の間、スリープ(一時的に実行を停止)させます。
    static void
    sleep(long millis, int nanos)
    システム・タイマーとスケジューラが正確であることを前提として、現在実行中のスレッドを、指定されたミリ秒数に指定されたナノ秒数を加算した間、スリープ(一時的に実行を停止)させます。
    static void
    sleep(Duration duration)
    現在実行中のスレッドが、システム・タイマーおよびスケジューラの精度および精度に従って、指定された期間(一時停止実行)をスリープします。
    void
    実行を開始するようにこのスレッドをスケジュールします。
    static Thread
    Preview.
    タスクを実行するための仮想スレッドを作成し、実行するようにスケジュールします。
    final void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    このメソッドは本質的に安全ではありません。
    final void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    このメソッドはデッドロックを発生しやすいため非推奨です。
    final long
    このスレッドの識別子を返します。
    このスレッドの文字列表現を返します。
    static void
    現在のスレッドが現在のプロセッサ使用量を譲る用意があることを示す、スケジューラへのヒントです。

    クラス java.lang.Objectで宣言されたメソッド

    equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • フィールド詳細

    • 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

      public Thread(Runnable task, String name)
      新しいプラットフォーム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を持ち、inheritThreadLocalstrueの場合に「継承可能なスレッド・ローカル」変数の初期値を継承します。

      このコンストラクタは、構築スレッドからの継承可能なスレッド・ローカル変数の初期値を継承するかどうかを指定する機能を追加したThread(ThreadGroup,Runnable,String,long)と同じです。 これにより、継承可能なスレッド・ローカルよりも細かい粒度制御が可能になります。 inheritThreadLocalsfalseの値を渡すときは、新しいスレッドが特定のスレッド・ローカル値が継承されることを期待するコードを実行すると、予期しない動作が発生する可能性があるので注意が必要です。

      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 CloneNotSupportedException
      Threadを意味のあるかたちで複製することは不可能なため、CloneNotSupportedExceptionをスローします。 代わりに新しいThreadを構築します。
      オーバーライド:
      clone、クラスObject
      戻り値:
      このインスタンスの複製。
      例外:
      CloneNotSupportedException - 常時
      関連項目:
    • startVirtualThread

      public static Thread startVirtualThread(Runnable task)
      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メソッドが起動されます。 このスレッドが仮想スレッドである場合、このメソッドを呼び出すと何も直接実行されません。

      定義:
      run、インタフェースRunnable
      実装要件:
      デフォルトの実装では、Threadの作成に使用されたRunnableタスクが実行されます。 スレッドがタスクなしで作成された場合、このメソッドは何もしません。
    • stop

      @Deprecated(since="1.2", forRemoval=true) public final void stop()
      削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
      このメソッドは本質的に安全ではありません。 Thread.stopを使ってスレッドを停止すると、チェックされないThreadDeath例外がスタックの下から上に伝えられた結果、そのスレッドによりロックされていたモニターのロックがすべて解除されます。 これらのモニターによって以前保護されていたオブジェクトが整合性のない状態にあった場合、壊れたオブジェクトはほかのスレッドに対して可視になり、動作が保証されないことがあります。 多くの場合、ターゲット・スレッドの実行停止を指示するには、stopではなく、単に一部の変数を変更するコードを使用する必要があります。 ターゲット・スレッドは、この変数を定期的に検査し、実行を停止するべきことを変数が示している場合には、スレッドのrunメソッドから通常の方法で復帰する必要があります。 条件変数などでターゲット・スレッドが長い間待機している場合、待機を中断させるには、interruptメソッドを使用します。 詳細は、「Thread.stop、Thread.suspend、およびThread.resumeが推奨されない理由」を参照してください。
      スレッドに強制的に実行を停止させます。

      セキュリティ・マネージャがインストールされている場合は、checkAccessメソッドがthisをその引数に指定して呼び出されます。 この結果、現在のスレッドでSecurityExceptionがスローされることがあります。

      また、このスレッドが現在のスレッドと異なる場合、つまり、現在のスレッドが自分以外のスレッドを停止しようとしている場合は、RuntimePermission("stopThread")を引数として、セキュリティ・マネージャのcheckPermissionメソッドも呼び出されます。 この場合にも、現在のスレッドでSecurityExceptionがスローされることがあります。

      このスレッドによって表されるスレッドは、それが実行していた動作に関係なく強制的に異常停止させられ、新しく生成したThreadDeathオブジェクトを例外としてスローします。

      まだ起動されていないスレッドを停止することができます。 スレッドが最終的に起動されると、すぐに終了します。

      アプリケーションは通常、特別なクリーンアップ演算(ThreadDeathをスローすると、スレッドが正式に終了する前にtry文のfinally句が実行されることに注意してください)を実行する必要がある場合を除き、ThreadDeathを捕捉しようとしないでください。 catch句によってThreadDeathオブジェクトが捕捉される場合は、スレッドが実際に終了するようにオブジェクトを再スローすることが重要です。

      そうでない場合、キャッチされていない例外を扱う最高レベルのエラー・ハンドラは、キャッチされていない例外がThreadDeathのインスタンスであれば、メッセージを出力したり、アプリケーションに通知したりすることはしません。

      例外:
      SecurityException - 現在のスレッドがこのスレッドを変更できない場合。
      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が推奨されない理由」を参照してください。
      このスレッドを中断します。

      まず、このスレッドのcheckAccessメソッドが、引数なしで呼び出されます。 この結果、現在のスレッドでSecurityExceptionがスローされることがあります。

      スレッドは、生存している場合に中断され、再開されない処理を先に進めることはできません。

      例外:
      SecurityException - 現在のスレッドがこのスレッドを変更できない場合。
      UnsupportedOperationException - 仮想スレッドで呼び出された場合
      関連項目:
    • resume

      @Deprecated(since="1.2", forRemoval=true) public final void resume()
      削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
      このメソッドはsuspend()とともに使用するためにのみ存在しますが、これはデッドロックを発生させやすいため推奨されていません。 詳細は、「Thread.stop、Thread.suspend、およびThread.resumeが推奨されない理由」を参照してください。
      中断されたスレッドを再開します。

      まず、このスレッドのcheckAccessメソッドが、引数なしで呼び出されます。 この結果、現在のスレッドでSecurityExceptionがスローされることがあります。

      スレッドは、生存しているが中断されている場合、実行が再開されて処理を先に進ませることが許可されます。

      例外:
      SecurityException - 現在のスレッドがこのスレッドを変更できない場合。
      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
      このスレッドが終了するまで最大millisミリ秒待機します。 0のタイム・アウトは無期限に待機することを意味します。 このメソッドは、スレッドがstartedでない場合、待機せずにただちに返します。
      実装上のノート:
      プラットフォーム・スレッドの場合、実装ではthis.isAliveで条件付けられたthis.waitコールのループを使用します。 スレッドが終了すると、this.notifyAllメソッドが呼び出されます。 アプリケーションでは、Threadインスタンスのwaitnotify、または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インスタンスのwaitnotify、またはnotifyAllを使用しないことをお薦めします。
      パラメータ:
      millis - ミリ秒単位の待機時間
      nanos - 0-999999追加で待機するナノ秒
      例外:
      IllegalArgumentException - millisの値が負の場合、またはnanosの値が範囲0-999999に含まれない場合
      InterruptedException - 何らかのスレッドが現在のスレッドに割り込んだ場合。 この例外がスローされると、現在のスレッドの割込みステータスはクリアされる。
    • join

      public final void join() throws InterruptedException
      このスレッドが終了するまで待機します。

      このメソッド呼出しの動作は、次の呼出しの動作とまったく同一です。

      join(0)

      例外:
      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)
      このスレッドを「デーモン」または「非デーモン」スレッドとしてマークします。 Java仮想マシンは、起動されたすべての非デーモン・スレッドが終了すると終了します。 仮想スレッドのデーモン・ステータスは常に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および名前が含まれます。 プラットフォーム・スレッドのデフォルト実装には、スレッド識別子、名前、優先度およびスレッド・グループの名前が含まれます。
      オーバーライド:
      toString、クラスObject
      戻り値:
      このスレッドの文字列表現。
    • 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()
      このスレッドのスタック・ダンプを表すスタック・トレース要素の配列を返します。 このスレッドが開始されていないか、開始済みだがまだシステムによって実行対象としてスケジュールされていないか、あるいは終了済みの場合、このメソッドから長さゼロの配列が返されます。 返された配列がゼロ以外の長さの配列である場合、配列の最初の要素はスタックの最上部を表します。これはシーケンスで呼び出されたもっとも新しいメソッドです。 配列の最後の要素は、スタックの底部を表します。これはシーケンスで呼び出されたもっとも古いメソッドです。

      これはシーケンスで呼び出されたもっとも古いメソッドです。セキュリティ・マネージャが存在し、このスレッドが現在のスレッドではない場合、スタック・トレースを取得してよいかどうかを調べるために、RuntimePermission("getStackTrace")アクセス権を使ってセキュリティ・マネージャのcheckPermissionメソッドが呼び出されます。

      仮想マシンの中には、特定の状況下でスタック・トレースから1つ以上のスタック・フレームを省略するものがあります。 極端な場合、このスレッドに関するスタック・トレース情報を持たない仮想マシンが、このメソッドから長さゼロの配列を返すことが許可されます。

      戻り値:
      1つのスタック・フレームを表すStackTraceElementの配列。
      例外:
      SecurityException - セキュリティ・マネージャが存在し、そのcheckPermissionメソッドがスレッドのスタック・トレースの取得を許可しない場合。
      導入されたバージョン:
      1.5
      関連項目:
    • getAllStackTraces

      public static Map<Thread,StackTraceElement[]> getAllStackTraces()
      すべてのライブ・プラットフォーム・スレッドのスタック・トレースのマップを返します。 マップに仮想スレッドは含まれません。 マップ・キーはスレッドです。また、各マップの値は対応するThreadのスタック・ダンプを表すStackTraceElementの配列です。 返されるスタック・トレースのフォーマットは、getStackTraceメソッドで指定されたものとなります。

      このメソッドが呼び出されている間に、スレッドが実行されている可能性があります。 各スレッドのスタック・トレースは、スナップショットを表すだけです。各スタック・トレースは異なる時期に取得できます。 仮想マシンがスレッドに関するスタック・トレース情報を持たない場合、マップ値に長さゼロの配列が返されます。

      セキュリティ・マネージャが存在し、このスレッドが現在のスレッドではない場合、すべてのスレッドのスタック・トレースを取得してよいかどうかを調べるために、RuntimePermission("getStackTrace")アクセス権とRuntimePermission("modifyThreadGroup")アクセス権を使ってセキュリティ・マネージャのcheckPermissionメソッドが呼び出されます。

      戻り値:
      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
      関連項目: