JavaTM 2 Platform
Standard Ed. 5.0

java.lang
クラス Thread

java.lang.Object
  上位を拡張 java.lang.Thread
すべての実装されたインタフェース:
Runnable

public class Thread
extends Object
implements Runnable

「スレッド」とは、プログラム内での実行スレッドのことです。Java 仮想マシンでは、アプリケーションは並列に実行される複数のスレッドを使用することができます。

各スレッドには優先順位が付けられています。優先順位の高いスレッドは、優先順位の低いスレッドよりも優先して実行されます。さらに、各スレッドがデーモンとしてマークされている場合もあれば、されていない場合もあります。あるスレッドで実行中のコードが新しい Thread オブジェクトを作成すると、この新しいスレッドには、その時点では、作成側のスレッドの優先順位に等しい優先順位が設定され、作成側スレッドがデーモンである場合にだけ、デーモンスレッドになます。

通常、Java 仮想マシンが起動する (一般的にはある指定されたクラスの main という名前が付けられたメソッドを呼び出す) と、デーモンスレッドではないスレッドが 1 つ存在します。Java 仮想マシンは、以下のどれかの条件が発生するまでスレッドを実行し続けます。

新しい実行のスレッドを作成するには 2 通りの方法があります。1 つの方法は、クラスを Thread のサブクラスであると宣言することです。このサブクラスは、クラス Threadrun メソッドをオーバーライドしなければなりません。そうすればサブクラスのインスタンスは割り当てられ、起動されることができます。たとえば、初期値より大きい素数を計算するスレッドは、次に示すようにして作成できます。



 class PrimeThread extends Thread { long minPrime; PrimeThread(long minPrime) { this.minPrime = minPrime; }  public void run() { // compute primes larger than minPrime  . . . } } 

次に、以下に示すコードでスレッドを作成し、スレッドの実行を開始します。


 PrimeThread p = new PrimeThread(143); p.start(); 

スレッドを作成するもう 1 つの方法は、Runnable インタフェースを実装するクラスを宣言することです。そうすると、そのクラスは、run メソッドを実装します。クラスのインスタンスが割り当てられ、Thread の作成時に引数として渡され、開始されます。この方法での同じ例は、以下に示すようになります。



 class PrimeRun implements Runnable { long minPrime; PrimeRun(long minPrime) { this.minPrime = minPrime; }  public void run() { // compute primes larger than minPrime  . . . } } 

次に、以下に示すコードでスレッドを作成し、スレッドの実行を開始します。


 PrimeRun p = new PrimeRun(143); new Thread(p).start(); 

各スレッドは識別のための名前を持ちます。複数のスレッドが同じ名前を持つことがあります。スレッドの作成時に名前が指定されないと、スレッドには新しい名前が生成されます。

導入されたバージョン:
JDK1.0
関連項目:
Runnable, Runtime.exit(int), run(), stop()

入れ子のクラスの概要
static class Thread.State
          スレッドの状態です。
static interface Thread.UncaughtExceptionHandler
          キャッチされない例外により、Thread が突然終了したときに呼び出されるのハンドラのインタフェースです。
 
フィールドの概要
static int MAX_PRIORITY
          スレッドに設定できる最高優先順位です。
static int MIN_PRIORITY
          スレッドに設定できる最低優先順位です。
static int NORM_PRIORITY
          スレッドに割り当てられるデフォルトの優先順位です。
 
コンストラクタの概要
Thread()
          新しい Thread オブジェクトを割り当てます。
Thread(Runnable target)
          新しい Thread オブジェクトを割り当てます。
Thread(Runnable target, String name)
          新しい Thread オブジェクトを割り当てます。
Thread(String name)
          新しい Thread オブジェクトを割り当てます。
Thread(ThreadGroup group, Runnable target)
          新しい Thread オブジェクトを割り当てます。
Thread(ThreadGroup group, Runnable target, String name)
          その実行オブジェクトとして target、名前として指定された name を持つ、group によって参照されるスレッドグループに属するような、新しい Thread オブジェクトを割り当てます。
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
          新しい Thread オブジェクトを割り当て、実行オブジェクトとして target を保持し、指定された name を名前として保持するようにします。
Thread(ThreadGroup group, String name)
          新しい Thread オブジェクトを割り当てます。
 
メソッドの概要
static int activeCount()
          現行スレッドのスレッドグループ内のアクティブなスレッド数を返します。
 void checkAccess()
          現在実行中のスレッドが、このスレッドを変更するためのアクセス権を持っているかどうかを判定します。
 int countStackFrames()
          推奨されていません。 この呼び出しの定義は、推奨されない suspend() に依存します。また、この呼び出しの結果は保証されません。
static Thread currentThread()
          現在実行中のスレッドオブジェクトの参照を返します。
 void destroy()
          推奨されていません。 このメソッドはもともとクリーンアップなしで破棄されるように設計されていました。保持されるモニターはロックされた状態を維持します。ただし、このメソッドは実装されませんでした。実装されていたら、suspend() とほぼ同じようにデッドロックが発生します。ターゲットスレッドが重要なシステムリソースを保護するロックを保持した状態で破棄された場合、どのスレッドも再びこのリソースにアクセスできません。別のスレッドがこのリソースをロックしようとすると、デッドロックが発生します。通常、そのようなデッドロックは、自身を「フリーズした」プロセスとして表明します。詳細は、「Thread.stop、Thread.suspend、および Thread.resume が推奨されない理由」を参照してください。
static void dumpStack()
          現在のスレッドのスタックトレースを出力します。
static int enumerate(Thread[] tarray)
          現行スレッドのスレッドグループおよびその下位グループ内のすべてのアクティブなスレッドを、指定された配列にコピーします。
static Map<Thread,StackTraceElement[]> getAllStackTraces()
          すべてのライブスレッドのスタックトレースマップを返します。
 ClassLoader getContextClassLoader()
          この Thread のコンテキスト ClassLoader を返します。
static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()
          キャッチされない例外によりスレッドが突然終了したときに呼び出されるデフォルトのハンドラを返します。
 long getId()
          このスレッドの識別子を返します。
 String getName()
          このスレッドの名前を返します。
 int getPriority()
          このスレッドの優先順位を返します。
 StackTraceElement[] getStackTrace()
          このスレッドのスタックダンプを表すスタックトレース要素の配列を返します。
 Thread.State getState()
          このスレッドの状態を返します。
 ThreadGroup getThreadGroup()
          このスレッドが所属するスレッドグループを返します。
 Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()
          キャッチされない例外によりスレッドが突然終了したときに呼び出されるハンドラを返します。
static boolean holdsLock(Object obj)
          現行スレッドが指定されたオブジェクトに対するモニターロックを保持する場合にのみ、true を返します。
 void interrupt()
          このスレッドに割り込みます。
static boolean interrupted()
          現在のスレッドが割り込まれているかどうかを調べします。
 boolean isAlive()
          このスレッドが生存しているかどうかを判定します。
 boolean isDaemon()
          このスレッドがデーモンスレッドであるかどうかを判定します。
 boolean isInterrupted()
          このスレッドが割り込まれているどうかを調べます。
 void join()
          このスレッドが終了するのを待機します。
 void join(long millis)
          このスレッドが終了するのを、最高で millis ミリ秒待機します。
 void join(long millis, int nanos)
          最高で millis ミリ秒に nanos ナノ秒を加算した間、このスレッドが終了するのを待機します。
 void resume()
          推奨されていません。 このメソッドはデッドロックを発生しやすいため推奨されません。suspend() とともに使用するためだけに提供されています。詳細は、「Thread.stop、Thread.suspend、および Thread.resume が推奨されない理由」を参照してください。
 void run()
          このスレッドが別個の Runnable 実行オブジェクトを使用して作成された場合、その Runnable オブジェクトの run メソッドが呼び出されます。
 void setContextClassLoader(ClassLoader cl)
          この Thread のコンテキスト ClassLoader を設定します。
 void setDaemon(boolean on)
          このスレッドを、デーモンスレッドまたはユーザスレッドとしてマークします。
static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
          キャッチされない例外により、スレッドが突然終了したときや、このスレッドに対してほかにハンドラが定義されていないときに呼び出されるデフォルトのハンドラを設定します。
 void setName(String name)
          このスレッドの名前を引数 name に等しくなるように変更します。
 void setPriority(int newPriority)
          このスレッドの優先順位を変更します。
 void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
          キャッチされない例外により、突然スレッドが終了したときに使用されるハンドラを設定します。
static void sleep(long millis)
          現在実行中のスレッドを、指定されたミリ秒数の間、スリープ (一時的に実行を停止) させます。
static void sleep(long millis, int nanos)
          現在実行中のスレッドを、指定されたミリ秒数に指定されたナノ秒数を加算した間、スリープ (実行停止) させます。
 void start()
          このスレッドの実行を開始します。
 void stop()
          推奨されていません。 このメソッドは本質的に安全ではありません。Thread.stop を使ってスレッドを停止すると、チェックされていない ThreadDeath 例外がスタックの下から上に伝えられた結果、そのスレッドによりロックされていたモニターのロックがすべて解除されます。これらのモニターによって直前まで保護されていたオブジェクトが整合性のない状態にあった場合、壊れたオブジェクトはほかのスレッドに対して可視になり、動作が保証されないことがあります。多くの場合、ターゲットスレッドの実行停止を指示するには、stop ではなく、単に一部の変数を変更するコードを使用する必要があります。ターゲットスレッドはこの変数を定期的にチェックし、変数が実行停止を指示している場合は、run メソッドから適切に復帰します。条件変数などでターゲットスレッドが長い間待機している場合、待機を中断させるには、interrupt メソッドを使用します。詳細は、「Thread.stop、Thread.suspend、および Thread.resume が推奨されない理由」を参照してください。
 void stop(Throwable obj)
          推奨されていません。 このメソッドは本質的に安全ではありません。stop() を参照してください。さらに、このメソッドは、ターゲットスレッドで処理の準備ができていない例外の生成に使用されることがある点でも危険です (このメソッドがなければスレッドによりスローされることのない、チェックされた例外など)。詳細は、「Thread.stop、Thread.suspend、および Thread.resume が推奨されない理由」を参照してください。
 void suspend()
          推奨されていません。 このメソッドはデッドロックを発生しやすいため推奨されません。ターゲットスレッドが、重要なシステムリソースを保護しているモニターのロックを保持している状態で中断された場合、ターゲットスレッドが再開されるまで、どのスレッドもこのリソースにアクセスできません。ターゲットスレッドを再開しようとするスレッドが、resume を呼び出す前にこのモニターをロックしようとすると、デッドロックが発生します。通常、そのようなデッドロックは、自身を「フリーズした」プロセスとして表明します。詳細は、「Thread.stop、Thread.suspend、および Thread.resume が推奨されない理由」を参照してください。
 String toString()
          スレッドの名前、優先順位、スレッドグループを含むこのスレッドの文字列表現を返します。
static void yield()
          現在実行中のスレッドオブジェクトを一時的に休止させ、ほかのスレッドが実行できるようにします。
 
クラス java.lang.Object から継承されたメソッド
clone, 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(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String)

Thread

public Thread(Runnable target)
新しい Thread オブジェクトを割り当てます。このコンストラクタは、Thread(null, target, gname) と同じ効果を持ちます。この場合、gname は、新しく作成される名前です。自動的に作成される名前は、n を整数とすると "Thread-"+n の形式を取ります。

パラメータ:
target - その run メソッドが呼び出されるオブジェクト
関連項目:
Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String)

Thread

public Thread(ThreadGroup group,
              Runnable target)
新しい Thread オブジェクトを割り当てます。このコンストラクタは、Thread(group, target, gname) と同じ効果を持ちます。この場合、gname は、新しく作成される名前です。自動的に作成される名前は、n を整数とすると "Thread-"+n の形式を取ります。

パラメータ:
group - スレッドグループ
target - その run メソッドが呼び出されるオブジェクト
例外:
SecurityException - 現在のスレッドが、指定されたスレッドグループ内にスレッドを作成できない場合
関連項目:
Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String)

Thread

public Thread(String name)
新しい Thread オブジェクトを割り当てます。このコンストラクタは、Thread(null, null, name) と同じ効果を持ちます。

パラメータ:
name - 新しいスレッドの名前
関連項目:
Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String)

Thread

public Thread(ThreadGroup group,
              String name)
新しい Thread オブジェクトを割り当てます。このコンストラクタは、Thread(group, null, name) と同じ効果を持ちます。

パラメータ:
group - スレッドグループ
name - 新しいスレッドの名前
例外:
SecurityException - 現在のスレッドが、指定されたスレッドグループ内にスレッドを作成できない場合
関連項目:
Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String)

Thread

public Thread(Runnable target,
              String name)
新しい Thread オブジェクトを割り当てます。このコンストラクタは、Thread(null, target, name) と同じ効果を持ちます。

パラメータ:
target - その run メソッドが呼び出されるオブジェクト
name - 新しいスレッドの名前
関連項目:
Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String)

Thread

public Thread(ThreadGroup group,
              Runnable target,
              String name)
その実行オブジェクトとして target、名前として指定された name を持つ、group によって参照されるスレッドグループに属するような、新しい Thread オブジェクトを割り当てます。

groupnull で、セキュリティマネージャが存在する場合、グループはセキュリティマネージャの getThreadGroup メソッドにより決まります。groupnull でセキュリティマネージャが存在しない場合、またはセキュリティマネージャの getThreadGroup メソッドが null を返す場合、グループは新規スレッドを作成中のスレッドと同じ ThreadGroup に設定されます。

セキュリティマネージャが存在する場合は、ThreadGroup を引数として渡して checkAccess メソッドを呼び出します。

また、getContextClassLoader メソッドまたは setContextClassLoader メソッドをオーバーライドするサブクラスのコンストラクタによって直接的または間接的に呼び出されたとき、RuntimePermission("enableContextClassLoaderOverride") アクセス権を使用して checkPermission メソッドを呼び出します。その結果、SecurityException が発生することがあります。

target 引数が null ではない場合、このスレッドが起動されると targetrun メソッドが呼び出されます。target 引数が null である場合は、このスレッドが起動されるときにこのスレッドの run メソッドが呼び出されます。

新しく作成されたスレッドの優先順位は、そのスレッドを作成したスレッド、つまり現在実行中のスレッドの優先順位と同じに設定されます。この優先順位を新しい値に変更する場合は、メソッド setPriority を使用できます。

新しく作成されたスレッドは、それを作成するスレッドがデーモンスレッドとマークされている場合にだけ、デーモンスレッドとマークされます。スレッドがデーモンであるかどうかを変更する場合は、メソッド setDaemon を使用できます。

パラメータ:
group - スレッドグループ
target - その run メソッドが呼び出されるオブジェクト
name - 新しいスレッドの名前
例外:
SecurityException - 現在のスレッドが、指定されたスレッドグループ内にスレッドを作成できない、またはコンテキストクラスローダのメソッドをオーバーライドできない場合
関連項目:
Runnable.run(), run(), setDaemon(boolean), setPriority(int), ThreadGroup.checkAccess(), SecurityManager.checkAccess(java.lang.Thread)

Thread

public Thread(ThreadGroup group,
              Runnable target,
              String name,
              long stackSize)
新しい Thread オブジェクトを割り当て、実行オブジェクトとして target を保持し、指定された name を名前として保持するようにします。また、group によって参照されるスレッドグループに所属し、指定された「スタックサイズ」を保持します。

このコンストラクタは、スレッドのスタックサイズ指定が可能である点を除き、Thread(ThreadGroup,Runnable,String) と同じです。スタックサイズは、仮想マシンをこのスレッドのスタックに割り当てるアドレス空間のおよそのバイト数になります。stackSize パラメータが存在する場合、その効果はプラットフォームによって大きく異なります。

いくつかのプラットフォームでは、stackSize パラメータにより大きな値を指定することで、スレッドが StackOverflowError をスローする前により大きな回帰深度を達成することが可能になります。同様に、より小さな値を指定することで、より多くのスレッドが OutOfMemoryError (またはほかの内部エラー) をスローせずに、同時に存在することが可能になります。stackSize パラメータの値と、最大回帰深度や並行レベルとの関係はプラットフォームによって異なります。プラットフォームによっては、stackSize パラメータの値がなんら影響を与えない場合があります。

仮想マシンは、stackSize パラメータを自由に扱い、指示することができます。プラットフォームでは指定された値が小さすぎる場合、仮想マシンは代わりにプラットフォーム固有の最小値を使用できます。指定された値が大きすぎる場合には、仮想マシンは代わりにプラットフォーム固有の最大値を使用できます。同様に、仮想マシンは、適切な場合には指定された値の切り上げまたは切り下げを自由に実行 (または完全に無視) できます。

stackSize パラメータに値ゼロを指定すると、このコンストラクタは Thread(ThreadGroup, Runnable, String) コンストラクタと正確に同じ動作を実行します。

このコンストラクタの動作はプラットフォームによって異なるために、慎重に使用する必要があります。指定された計算の実行に必要なスレッドスタックサイズは、JRE 実装によって異なる可能性があります。このため、スタックサイズパラメータを注意深くチューニングしたり、アプリケーションを実行する JRE 実装ごとにチューニングを繰り返したりすることが必要な場合があります。

実装上の注意点: Java プラットフォーム実装者は、stackSize parameter を基準にして実装の動作をドキュメント化しておくことをお勧めします。

パラメータ:
group - スレッドグループ
target - その run メソッドが呼び出されるオブジェクト
name - 新しいスレッドの名前
stackSize - 新規スレッドのスタックサイズまたはゼロ (このパラメータを無視することを示す)
例外:
SecurityException - 現在のスレッドが、指定されたスレッドグループ内にスレッドを作成できない場合
メソッドの詳細

currentThread

public static Thread currentThread()
現在実行中のスレッドオブジェクトの参照を返します。

戻り値:
現在実行中のスレッド

yield

public static void yield()
現在実行中のスレッドオブジェクトを一時的に休止させ、ほかのスレッドが実行できるようにします。


sleep

public static void sleep(long millis)
                  throws InterruptedException
現在実行中のスレッドを、指定されたミリ秒数の間、スリープ (一時的に実行を停止) させます。スレッドはモニターの所有権を失いません。

パラメータ:
millis - ミリ秒単位のスリープ時間の長さ
例外:
InterruptedException - 別のスレッドが現在のスレッドに割り込んだ場合。この例外がスローされると、現在のスレッドの割り込みステータスはクリアされる
関連項目:
Object.notify()

sleep

public static void sleep(long millis,
                         int nanos)
                  throws InterruptedException
現在実行中のスレッドを、指定されたミリ秒数に指定されたナノ秒数を加算した間、スリープ (実行停止) させます。スレッドはモニターの所有権を失いません。

パラメータ:
millis - ミリ秒単位のスリープ時間の長さ
nanos - スリープするための 0 〜 999999 の追加ナノ秒
例外:
IllegalArgumentException - millis の値が負数の場合、または nanos の値が 0 〜 999999 の範囲外の場合
InterruptedException - 別のスレッドが現在のスレッドに割り込んだ場合。この例外がスローされると、現在のスレッドの「割り込みステータス」はクリアされる
関連項目:
Object.notify()

start

public void start()
このスレッドの実行を開始します。Java 仮想マシンは、このスレッドの run メソッドを呼び出します。

その結果、(start メソッドへの呼び出しから復帰する) 現在のスレッドと (その run メソッドを実行する) 別のスレッドという 2 つのスレッドが並列に実行されます。

スレッドを複数回起動するのは、決して正しいとは言えません。特に、スレッドは実行を終えてから再起動することはできません。

例外:
IllegalThreadStateException - スレッドがすでに起動していた場合
関連項目:
run(), stop()

run

public void run()
このスレッドが別個の Runnable 実行オブジェクトを使用して作成された場合、その Runnable オブジェクトの run メソッドが呼び出されます。そうでない場合、このメソッドは何も行わずに復帰します。

Thread のサブクラスは、このメソッドをオーバーライドしなければなりません。

定義:
インタフェース Runnable 内の run
関連項目:
start(), stop(), Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String), Runnable.run()

stop

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

スレッドに強制的に実行を停止させます。

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

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

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

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

アプリケーションは、通常とは異なるクリーンアップ動作を実行しなければならない場合を除き、ThreadDeath をキャッチすべきではありません。ただし、ThreadDeath をスローすると、スレッドが正式に終了する前に try 文の finally 節が実行されることに注意してください。catch 節が ThreadDeath オブジェクトをキャッチする場合は、スレッドが実際に終了するようにオブジェクトをスローし直すことが重要です。

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

例外:
SecurityException - 現在のスレッドがこのスレッドを変更できない場合
関連項目:
interrupt(), checkAccess(), run(), start(), ThreadDeath, java.lang.Throwable)(java.lang.Thread,, SecurityManager.checkAccess(Thread), SecurityManager.checkPermission(java.security.Permission)

stop

@Deprecated
public final void stop(Throwable obj)
推奨されていません。 このメソッドは本質的に安全ではありません。stop() を参照してください。さらに、このメソッドは、ターゲットスレッドで処理の準備ができていない例外の生成に使用されることがある点でも危険です (このメソッドがなければスレッドによりスローされることのない、チェックされた例外など)。詳細は、「Thread.stop、Thread.suspend、および Thread.resume が推奨されない理由」を参照してください。

スレッドに強制的に実行を停止させます。

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

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

引数 obj が null の場合、現在のスレッドで NullPointerException がスローされます。

このスレッドによって表されるスレッドは、それが実行する動作には関係なく強制的に終了され、例外として Throwable オブジェクト obj がスローされます。これは通常では行われない動作であるため、通常は引数を設定しない stop メソッドを使用してください。

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

パラメータ:
obj - スロー対象の Throwable オブジェクト
例外:
SecurityException - 現在のスレッドがこのスレッドを変更できない場合
関連項目:
interrupt(), checkAccess(), run(), start(), stop(), SecurityManager.checkAccess(Thread), SecurityManager.checkPermission(java.security.Permission)

interrupt

public void interrupt()
このスレッドに割り込みます。

現在のスレッドが自身に割り込んでいないかぎり (この割り込みは許可される)、このスレッドの checkAccess メソッドが呼び出されます。このメソッドにより、SecurityException がスローされる場合があります。

Object クラスの wait()wait(long)、または wait(long, int) メソッドの呼び出し、またはこのクラスの join()join(long)join(long, int)sleep(long)、または sleep(long, int) メソッドの呼び出しでこのスレッドがブロックされる場合、割り込みステータスはクリアされ、InterruptedException を受け取ります。

interruptible channel に対する I/O 操作でこのスレッドがブロックされる場合、チャネルは閉じられ、スレッドの割り込みステータスが設定されます。また、スレッドは ClosedByInterruptException を受け取ります。

Selector でこのスレッドがブロックされる場合、スレッドの割り込みステータスが設定されて、選択操作から即座に返されます。通常、返される値は、セレクタの wakeup メソッドが呼び出された場合と同じく、ゼロ以外の値になります。

前述の条件のどれにも当てはまらない場合、このスレッドの割り込みステータスが設定されます。

例外:
SecurityException - 現在のスレッドがこのスレッドを変更できない場合

interrupted

public static boolean interrupted()
現在のスレッドが割り込まれているかどうかを調べします。このメソッドによりスレッドの「割り込みステータス」がクリアされます。つまり、このメソッドが続けて 2 回呼び出された場合、2 回目の呼び出しは false を返します (最初の呼び出しが割り込みステータスをクリアしたあとで、2 番目の呼び出しがそれを確認する前に現在のスレッドがもう一度割り込まれた場合を除く)。

戻り値:
現在のスレッドが割り込まれている場合は true、そうでない場合は false
関連項目:
isInterrupted()

isInterrupted

public boolean isInterrupted()
このスレッドが割り込まれているどうかを調べます。このメソッドによってスレッドの「割り込みステータス」が影響を受けることはありません。

戻り値:
このスレッドが割り込まれている場合は true、そうでない場合は false
関連項目:
interrupted()

destroy

@Deprecated
public void destroy()
推奨されていません。 このメソッドはもともとクリーンアップなしで破棄されるように設計されていました。保持されるモニターはロックされた状態を維持します。ただし、このメソッドは実装されませんでした。実装されていたら、suspend() とほぼ同じようにデッドロックが発生します。ターゲットスレッドが重要なシステムリソースを保護するロックを保持した状態で破棄された場合、どのスレッドも再びこのリソースにアクセスできません。別のスレッドがこのリソースをロックしようとすると、デッドロックが発生します。通常、そのようなデッドロックは、自身を「フリーズした」プロセスとして表明します。詳細は、「Thread.stop、Thread.suspend、および Thread.resume が推奨されない理由」を参照してください。

NoSuchMethodError をスローします。

例外:
NoSuchMethodError - 常時

isAlive

public final boolean isAlive()
このスレッドが生存しているかどうかを判定します。スレッドが起動されていて、まだ終了されていない場合、スレッドは生存しています。

戻り値:
このスレッドが生存している場合は true、そうでない場合は false

suspend

@Deprecated
public final void suspend()
推奨されていません。 このメソッドはデッドロックを発生しやすいため推奨されません。ターゲットスレッドが、重要なシステムリソースを保護しているモニターのロックを保持している状態で中断された場合、ターゲットスレッドが再開されるまで、どのスレッドもこのリソースにアクセスできません。ターゲットスレッドを再開しようとするスレッドが、resume を呼び出す前にこのモニターをロックしようとすると、デッドロックが発生します。通常、そのようなデッドロックは、自身を「フリーズした」プロセスとして表明します。詳細は、「Thread.stop、Thread.suspend、および Thread.resume が推奨されない理由」を参照してください。

このスレッドを中断します。

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

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

例外:
SecurityException - 現在のスレッドがこのスレッドを変更できない場合
関連項目:
checkAccess()

resume

@Deprecated
public final void resume()
推奨されていません。 このメソッドはデッドロックを発生しやすいため推奨されません。suspend() とともに使用するためだけに提供されています。詳細は、「Thread.stop、Thread.suspend、および Thread.resume が推奨されない理由」を参照してください。

中断されたスレッドを再開します。

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

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

例外:
SecurityException - 現在のスレッドがこのスレッドを変更できない場合
関連項目:
checkAccess(), suspend()

setPriority

public final void setPriority(int newPriority)
このスレッドの優先順位を変更します。

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

そうでない場合、このスレッドの優先順位は、指定された newPriority とスレッドのスレッドグループの最高許容優先順位の内のどちらか小さいほうに設定されます。

パラメータ:
newPriority - このスレッドを設定する優先順位
例外:
IllegalArgumentException - 優先順位が MIN_PRIORITYMAX_PRIORITY の範囲外である場合
SecurityException - 現在のスレッドがこのスレッドを変更できない場合
関連項目:
getPriority(), checkAccess(), getPriority(), getThreadGroup(), MAX_PRIORITY, MIN_PRIORITY, ThreadGroup.getMaxPriority()

getPriority

public final int getPriority()
このスレッドの優先順位を返します。

戻り値:
このスレッドの優先順位
関連項目:
setPriority(int), setPriority(int)

setName

public final void setName(String name)
このスレッドの名前を引数 name に等しくなるように変更します。

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

パラメータ:
name - このスレッドの新しい名前
例外:
SecurityException - 現在のスレッドがこのスレッドを変更できない場合
関連項目:
getName(), checkAccess(), getName()

getName

public final String getName()
このスレッドの名前を返します。

戻り値:
このスレッドの名前
関連項目:
setName(java.lang.String), setName(java.lang.String)

getThreadGroup

public final ThreadGroup getThreadGroup()
このスレッドが所属するスレッドグループを返します。このスレッドが終了されている (停止されている) 場合、このメソッドは null を返します。

戻り値:
このスレッドのスレッドグループ

activeCount

public static int activeCount()
現行スレッドのスレッドグループ内のアクティブなスレッド数を返します。

戻り値:
現行スレッドのスレッドグループ内のアクティブなスレッド数

enumerate

public static int enumerate(Thread[] tarray)
現行スレッドのスレッドグループおよびその下位グループ内のすべてのアクティブなスレッドを、指定された配列にコピーします。このメソッドは、現行スレッドのスレッドグループの enumerate メソッドを、配列引数を指定して呼び出すだけです。

セキュリティマネージャが存在する場合、enumerate メソッドは、スレッドグループを引数としてセキュリティマネージャの checkAccess メソッドを呼び出します。この結果、SecurityException がスローされることがあります。

パラメータ:
tarray - Thread オブジェクトのコピー先配列
戻り値:
配列に格納されるスレッド数
例外:
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkAccess メソッドがこの操作を許可しない場合
関連項目:
ThreadGroup.enumerate(java.lang.Thread[]), SecurityManager.checkAccess(java.lang.ThreadGroup)

countStackFrames

@Deprecated
public int countStackFrames()
推奨されていません。 この呼び出しの定義は、推奨されない suspend() に依存します。また、この呼び出しの結果は保証されません。

このスレッド内のスタックフレーム数をカウントします。スレッドは中断される必要があります。

戻り値:
このスレッド内のスタックフレームの数
例外:
IllegalThreadStateException - このスレッドが中断されない場合

join

public final void join(long millis)
                throws InterruptedException
このスレッドが終了するのを、最高で millis ミリ秒待機します。0 のタイムアウトは永遠に待機することを意味します。

パラメータ:
millis - ミリ秒単位の待機時間
例外:
InterruptedException - 別のスレッドが現在のスレッドに割り込んだ場合。この例外がスローされると、現在のスレッドの「割り込みステータス」はクリアされる

join

public final void join(long millis,
                       int nanos)
                throws InterruptedException
最高で millis ミリ秒に nanos ナノ秒を加算した間、このスレッドが終了するのを待機します。

パラメータ:
millis - ミリ秒単位の待機時間
nanos - 待機するための 0 〜 999999 の追加ナノ秒
例外:
IllegalArgumentException - millis の値が負数の場合、または nanos の値が 0 〜 999999 の範囲外の場合
InterruptedException - 別のスレッドが現在のスレッドに割り込んだ場合。この例外がスローされると、現在のスレッドの「割り込みステータス」はクリアされる

join

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

例外:
InterruptedException - 別のスレッドが現在のスレッドに割り込んだ場合。この例外がスローされると、現在のスレッドの「割り込みステータス」はクリアされる

dumpStack

public static void dumpStack()
現在のスレッドのスタックトレースを出力します。このメソッドはデバッグの場合にだけ使用します。

関連項目:
Throwable.printStackTrace()

setDaemon

public final void setDaemon(boolean on)
このスレッドを、デーモンスレッドまたはユーザスレッドとしてマークします。Java 仮想マシンは、実行中のスレッドがデーモンスレッドだけになると終了します。

このメソッドは、スレッド起動前に呼び出す必要があります。

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

パラメータ:
on - true の場合、このスレッドをデーモンスレッドとしてマークする
例外:
IllegalThreadStateException - このスレッドがアクティブな場合
SecurityException - 現在のスレッドがこのスレッドを変更できない場合
関連項目:
isDaemon(), checkAccess()

isDaemon

public final boolean isDaemon()
このスレッドがデーモンスレッドであるかどうかを判定します。

戻り値:
このスレッドがデーモンスレッドである場合は true、そうでない場合は false
関連項目:
setDaemon(boolean)

checkAccess

public final void checkAccess()
現在実行中のスレッドが、このスレッドを変更するためのアクセス権を持っているかどうかを判定します。

セキュリティマネージャが存在する場合、このスレッドがその引数に指定されて checkAccess メソッドが呼び出されます。この結果、SecurityException がスローされることがあります。

注: このメソッドが JDK 1.1 では final でなかったのは誤りです。Java 2 プラットフォームでは final になっています。

例外:
SecurityException - 現在のスレッドがこのスレッドへのアクセスを許されていない場合
関連項目:
SecurityManager.checkAccess(java.lang.Thread)

toString

public String toString()
スレッドの名前、優先順位、スレッドグループを含むこのスレッドの文字列表現を返します。

オーバーライド:
クラス Object 内の toString
戻り値:
このスレッドの文字列表現

getContextClassLoader

public ClassLoader getContextClassLoader()
この Thread のコンテキスト ClassLoader を返します。コンテキスト ClassLoader は、クラスおよびリソースをロードするときに、このスレッドで実行中のコードが使用するためにスレッドの作成側によって提供されます。コンテキスト ClassLoader が設定されていない場合、デフォルトでは親 Thread の ClassLoader コンテキストになります。通常、親スレッドのコンテキスト ClassLoader は、アプリケーションのロードに使用されるクラスローダに設定されます。

セキュリティマネージャが存在する場合、呼び出し側のクラスローダが null ではなく、コンテキストクラスローダを要求されているスレッドのコンテキストクラスローダと同じでなく、そのコンテキストクラスローダの上位オブジェクトでもないときは、コンテキスト ClassLoader を取得してもよいかどうかを確認するために、RuntimePermission("getClassLoader") アクセス権を使って、セキュリティマネージャの checkPermission メソッドが呼び出されます。

戻り値:
この Thread のコンテキスト ClassLoader
例外:
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkPermission メソッドがコンテキスト ClassLoader の取得を許可しない場合
導入されたバージョン:
1.2
関連項目:
setContextClassLoader(java.lang.ClassLoader), SecurityManager.checkPermission(java.security.Permission), RuntimePermission

setContextClassLoader

public void setContextClassLoader(ClassLoader cl)
この Thread のコンテキスト ClassLoader を設定します。コンテキスト ClassLoader はスレッドの作成時に設定され、これによりスレッドの作成側は、クラスおよびリソースのロード時にスレッドで実行中のコードに適切なクラスローダを提供できるようになります。

セキュリティマネージャが存在する場合、最初に、コンテキスト ClassLoader を設定してよいかどうかを調べるために RuntimePermission("setContextClassLoader") アクセス権を使って checkPermission メソッドが呼び出されます。

パラメータ:
cl - この Thread のコンテキスト ClassLoader
例外:
SecurityException - 現在のスレッドがコンテキスト ClassLoader を設定できない場合
導入されたバージョン:
1.2
関連項目:
getContextClassLoader(), SecurityManager.checkPermission(java.security.Permission), RuntimePermission

holdsLock

public static boolean holdsLock(Object obj)
現行スレッドが指定されたオブジェクトに対するモニターロックを保持する場合にのみ、true を返します。

このメソッドは、以下のように、プログラムが、現行スレッドが指定されたロックをすでに保持していることを示す際に使用されます。


     assert Thread.holdsLock(obj);
 

パラメータ:
obj - 所有権のロックをテストするオブジェクト
戻り値:
現行スレッドが指定されたオブジェクトに対するモニターロックを保持する場合、true が返される
例外:
NullPointerException - obj が null の場合
導入されたバージョン:
1.4

getStackTrace

public StackTraceElement[] getStackTrace()
このスレッドのスタックダンプを表すスタックトレース要素の配列を返します。このスレッドが起動していなかった場合や終了していた場合、このメソッドはゼロの長さの配列を返します。返された配列がゼロ以外の長さの配列である場合、配列の最初の要素はスタックの最上部を表します。これはシーケンスで呼び出された最近のメソッドです。配列の最後の要素は、スタックの底部を表します。これはシーケンスで呼び出されたもっとも古いメソッドです。

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

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

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

getAllStackTraces

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

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

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

戻り値:
Thread から、対応するスレッドのスタックトレースを表す StackTraceElement の配列までの Map
例外:
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkPermission メソッドがスレッドのスタックトレースの取得を許可しない場合
導入されたバージョン:
1.5
関連項目:
getStackTrace(), SecurityManager.checkPermission(java.security.Permission), RuntimePermission, Throwable.getStackTrace()

getId

public long getId()
このスレッドの識別子を返します。スレッド ID は、スレッドが作成されたときに生成された正の long 型の数字です。スレッド ID は一意であり、その寿命を通じて変更されることはありません。スレッドが終了すると、スレッド ID は再利用可能です。

戻り値:
このスレッドの ID
導入されたバージョン:
1.5

getState

public Thread.State getState()
このスレッドの状態を返します。このメソッドは、同期制御用ではなく、システム状態の監視に使用されるよう設計されています。

戻り値:
このスレッドの状態
導入されたバージョン:
1.5

setDefaultUncaughtExceptionHandler

public static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
キャッチされない例外により、スレッドが突然終了したときや、このスレッドに対してほかにハンドラが定義されていないときに呼び出されるデフォルトのハンドラを設定します。

キャッチされない例外の扱いはスレッドによりまず制御され、次にスレッドの ThreadGroup オブジェクトにより、最終的にはデフォルトのキャッチされない例外ハンドラにより制御されます。スレッドが明示的なキャッチされない例外ハンドラセットを持たない場合、スレッドのスレッドグループ (親スレッドグループを含む) は、uncaughtException メソッドを特殊化しません。次に、デフォルトハンドラの uncaughtException メソッドが呼び出されます。

デフォルトのキャッチされない例外ハンドラを設定することで、アプリケーションでは、システムで提供された「デフォルト」の動作をすでに受け入れているスレッドのキャッチされない例外を扱う方法 (特定のデバイスやファイルへのログインなど) を変更できます。 

通常、デフォルトのキャッチされない例外ハンドラは、スレッドの ThreadGroup オブジェクトと異なってはいけません。これは、無限の再帰を招く可能性があるからです。

パラメータ:
eh - デフォルトのキャッチされない例外ハンドラとして使用するオブジェクト。null の場合、デフォルトのハンドラはない
例外:
SecurityException - セキュリティマネージャが存在し、RuntimePermission ("setDefaultUncaughtExceptionHandler") を拒否した場合
導入されたバージョン:
1.5
関連項目:
setUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler), getUncaughtExceptionHandler(), ThreadGroup.uncaughtException(java.lang.Thread, java.lang.Throwable)

getDefaultUncaughtExceptionHandler

public static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()
キャッチされない例外によりスレッドが突然終了したときに呼び出されるデフォルトのハンドラを返します。戻り値が null の場合、デフォルトのハンドラはありません。

導入されたバージョン:
1.5
関連項目:
setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)

getUncaughtExceptionHandler

public Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()
キャッチされない例外によりスレッドが突然終了したときに呼び出されるハンドラを返します。このスレッドが明示的に設定されたキャッチされない例外ハンドラを持たない場合、スレッドが終了しないかぎり、スレッドの ThreadGroup オブジェクトが返されます。この場合、null が返されます。

導入されたバージョン:
1.5

setUncaughtExceptionHandler

public void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
キャッチされない例外により、突然スレッドが終了したときに使用されるハンドラを設定します。

キャッチされない例外ハンドラを明示的に設定することで、スレッドはキャッチされない例外を完全に制御できます。このようなハンドラが設定されていない場合は、スレッドの ThreadGroup オブジェクトがハンドラとして機能します。

パラメータ:
eh - スレッドのキャッチされない例外ハンドラとして使用されるオブジェクト。null の場合、スレッドは明示的なハンドラを持たない
例外:
SecurityException - 現在のスレッドがこのスレッドの変更を許されていない場合
導入されたバージョン:
1.5
関連項目:
setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler), ThreadGroup.uncaughtException(java.lang.Thread, java.lang.Throwable)

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。