全パッケージ  クラス階層  このパッケージ  前項目  次項目  インデックス

クラス java.lang.Thread

java.lang.Object
   |
   +----java.lang.Thread

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

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

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

新しい実行のスレッドを作成するには 2 通りの方法があります。最初の方法はクラスを 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();
 

スレッドを作成するもう一つの方法は、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();
 

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

参照:
Runnable, exit, run, stop

Variable Index

 o MAX_PRIORITY
スレッドに設定できる最高優先順位。
 o MIN_PRIORITY
スレッドに設定できる最低優先順位。
 o NORM_PRIORITY
スレッドに割り当てられるデフォルトの優先順位。

Constructor Index

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

Method Index

 o activeCount()
このスレッドグループ内の現在のアクティブなスレッドの数を返す。
 o checkAccess()
現在実行中のスレッドがこのスレッドを修正する許可を得ているかどうかを判断する。
 o countStackFrames()
このスレッドのスタックフレームの数をカウントする。
 o currentThread()
現在実行中のスレッドオブジェクトへの参照を返す。
 o destroy()
クリーンアップを行わずにこのスレッドを破棄する。
 o dumpStack()
現在のスレッドのスタックトレースを出力する。
 o enumerate(Thread[])
このスレッドグループとそのサブグループ内のアクティブな各スレッドを指定された配列にコピーする。
 o getName()
このスレッドの名前を返す。
 o getPriority()
このスレッドの優先順位を返す。
 o getThreadGroup()
このスレッドのスレッドグループを返す。
 o interrupt()
このスレッドに割り込む。
 o interrupted()
現在のスレッドに割り込まれたかどうかをテストする。
 o isAlive()
このスレッドがアクティブであるかテストする。
 o isDaemon()
このスレッドがデーモンスレッドであるかテストする。
 o isInterrupted()
カレントスレッドに割り込まれているかどうかをテストする。
 o join()
このスレッドが死ぬのを待機する。
 o join(long)
最大で millis ミリ秒の間このスレッドが死ぬのを待つ。
 o join(long, int)
最大で millis ミリ秒に nanos ナノ秒を加算した間このスレッドが死ぬのを待つ。
 o resume()
一時停止されたスレッドを再開する。
 o run()
このスレッドが別個の Runnable オブジェクトを使用して構築された場合、その Runnable オブジェクトのrunメソッドが呼び出される。それ以外の場合には、このメソッドは何も実行しないで返す。
 o setDaemon(boolean)
スレッドをデーモンスレッドもしくはユーザスレッドとしてマークする。
 o setName(文字列)
このスレッドの名前を引数name に等しくなるように変更する。
 o setPriority(int)
このスレッドの優先順位を変更する。
 o sleep(long)
指定されたミリ秒数の間、現在実行中のスレッドをスリープ(一時的に実行を停止)させる。
 o sleep(long, int)
指定されたミリ秒数に指定されたナノ秒加算した間、現在実行中のスレッドをスリープ(実行停止)させる。
 o start()
このスレッドに実行を開始させる。 Java 仮想マシンがこのスレッドのrun メソッドを呼び出す。
 o stop()
スレッドに強制的に実行を停止させる。
 o stop(Throwable)
スレッドに強制的に実行を停止させる。
 o suspend()
このスレッドを中断する。
 o toString()
スレッドの名前、優先順位、スレッドグループを含むこのスレッドの文字列表記を返す。
 o yield()
現在実行中のスレッドオブジェクトを一時的に休止させ、他のスレッドの実行を許可する。

Variables

 o MIN_PRIORITY
  public static final int MIN_PRIORITY
スレッドに設定できる最低優先順位です。

 o NORM_PRIORITY
  public static final int NORM_PRIORITY
スレッドに割り当てられるデフォルトの優先順位です。

 o MAX_PRIORITY
  public static final int MAX_PRIORITY
スレッドに設定できる最高優先順位です。

Constructors

 o Thread
  public Thread()
新規 Threadオブジェクトを割り当てます。この構築子は、Thread ( null、 null、 gname)と同じ効果を持ちます。この場合、gnameは、新規に作成される名前です。自動的に作成される名前は、n を整数とすると "Thread-"+nの形式を取ります。

このようにして作成されたスレッドは、何か実際にしようとするためには run() メソッドをオーバーライドしていなければなりません。このメソッドを使用する例を以下に示します。

     import java.lang.*; 
     class plain01 implements Runnable {
         String name; 
         plain01() {
             name = null;
         }
         plain01(String s) {
             name = s;
         }
         public void run() {
             if (name == null)
                 System.out.println("A new thread created");
             else
                 System.out.println("A new thread with name " + name +
                                    " created");
         }
     }
     class threadtest01 {
         public static void main(String args[] ) {
             int failed = 0 ;
             Thread t1 = new Thread();  
             if (t1 != null)
                 System.out.println("new Thread() succeed");
             else {
                 System.out.println("new Thread() failed"); 
                 failed++; 
             }
         }
     }
 

参照:
Thread
 o Thread
  public Thread(Runnable target)
新規 Thread オブジェクトを割り当てます。この構築子は、 Thread( null、target、 gname)と同じ効果を持ちます。この場合gnameは新規に作成される名前です。自動的に作成される名前は、 n が整数とすると"Thread-"+nの形式を取ります。

パラメータ:
target − そのrunメソッドが呼び出されるオブジェクト
参照:
Thread
 o Thread
  public Thread(ThreadGroup group,
                Runnable target)
新規 Thread オブジェクトを割り当てます。構築子は、 Thread(group、target、 gname)と同じ効果を持ちます。この場合、 gname は、新規に作成される名前です。自動的に作成される名前は、 n が整数とすると "Thread-"+n の形式を取ります。

パラメータ:
group - スレッドグループ
target - その run メソッドが呼び出されるオブジェクト
例外: SecurityException
カレントスレッドで指定されたスレッドグループ内にスレッドを作成できない場合
参照:
Thread
 o Thread
  public Thread(String name)
この構築子は、 Thread( null、 null、name )と同じ効果を持ちます。

パラメータ:
name - 新規スレッドの名前
参照:
Thread
 o Thread
  public Thread(ThreadGroup group,
                String name)
新規 Threadオブジェクトを割り当てます。この構築子は、 Thread( group、 null、name )と同じ効果を持ちます。

パラメータ:
group - スレッドグループ
name - 新規スレッドの名前
例外: SecurityException
カレントスレッドで指定されたグループ内にスレッドを作成できない場合
参照:
Thread
 o Thread
  public Thread(Runnable target,
                String name)
新規 Thread オブジェクトを割り当てます。この構築子は、 Thread( null、target、name ) と同じ効果を持ちます。

パラメータ:
target - その run メソッドが呼びされるオブジェクト
name - 新規スレッドの名前
参照:
Thread
 o Thread
  public Thread(ThreadGroup group,
                Runnable target,
                String name)
その実行オブジェクトとして target 、名前として指定した nameをもつ、groupによって参照されるスレッドグループに属するような、新規Thread オブジェクトを割り当てます。

group null ではない場合、そのスレッドグループのcheckAccess メソッドは引数を指定されずに呼び出されます。このため、SecurityException がスローされる結果となります。 group null である場合は、新規プロセスは新規スレッドを作成するスレッドと同じグループに属します。

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

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

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

パラメータ:
group - スレッドグループ
target - その run 方法が呼び出されるオブジェクト
name - 新規スレッドの名前
例外: SecurityException
カレントスレッドで指定されたスレッドグループ内でスレッドを作成できない場合
参照:
run, run, setDaemon, setPriority, checkAccess

Methods

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

返り値:
現在実行中のスレッド
 o yield
 public static native void yield()
現在実行中のスレッドオブジェクトを一時的に休止させ、他のスレッドの実行を許可します。

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

パラメータ:
millis - ミリ秒単位のスリープ時間の長さ
例外: InterruptedException
別のスレッドがこのスレッドに割り込んだ場合
参照:
notify
 o sleep
  public static void sleep(long millis,
                           int nanos) throws InterruptedException
現在実行中のスレッドを、指定されたミリ秒数に指定されたナノ秒数を加算した期間、スリープ(実行停止)させます。スレッドはモニタの所有権を失いません。

パラメータ:
millis - ミリ秒単位のスリープ時間の長さ
nanos - スリープするための 0-999999の追加ナノ秒
例外: IllegalArgumentException
millis が負の場合、または nanos の値が0-999999の範囲外である場合
例外: InterruptedException
別のスレッドがこのスレッドに割り込んだ場合
参照:
notify
 o start
 public native synchronized void start()
このスレッドの実行を開始します。Java 仮想マシン は、このスレッドの run メソッドを呼び出します。 その結果、(start メソッドへの呼び出しから返る)現在のスレッドと(その run メソッドを実行する)別のスレッドという 2 つのスレッドが並列に実行します。

例外: IllegalThreadStateException
スレッドがすでに起動していた場合
参照:
run, stop
 o run
  public void run()
このスレッドが別個の Runnable 実行オブジェクトを使用して構築された場合、その Runnable オブジェクトの run メソッドが呼び出されます。それ以外の場合、このメソッドは何も実行しないで返ります。

Thread のサブクラスは、このメソッドをオーバーライドします。

参照:
start, stop, Thread, run
 o stop
  public final void stop()
スレッドに強制的に実行を停止させます。

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

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

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

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

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

例外: SecurityException
現在のスレッドでこのスレッドを修正できない場合
参照:
checkAccess, run, start, ThreadDeath, uncaughtException
 o stop
  public final synchronized void stop(Throwable o)
スレッドに強制的に実行を停止させます。

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

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

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

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

パラメータ:
obj - スロー対象の Throwable オブジェクト
例外: SecurityException
i現在のスレッドでこのスレッドを修正できない場合
参照:
checkAccess, run, start, stop
 o interrupt
  public void interrupt()
このスレッドに割り込みます。

 o interrupted
  public static boolean interrupted()
現在のスレッドが割り込まれたかどうか試験します。 interterrupted は静的なメソッドですが、 isInterrupted が現在のThread のインスタンスで呼び出されることに注意してください。

返り値:
現在のスレッドが割り込まれている場合 true、 現在のスレッドが割り込まれていない場合 false
参照:
isInterrupted
 o isInterrupted
  public boolean isInterrupted()
現在のスレッドが割り込まれているかどうかを試験します。 isInterruptedThread のインスタンス上で呼び出されるのに対し、 interrupted は静的なメソッドであることに注意してください。

返り値:
このスレッドが割り込まれている場合 true、 このスレッドが割り込まれていない場合 false
参照:
interrupted
 o destroy
  public void destroy()
クリーンアップを行わないでこのスレッドを破棄します。ロックしたあらゆるモニタがロックされたままになります(このメソッドは、 Java 1.0.2 では実装されていません)。

 o isAlive
 public final native boolean isAlive()
このスレッドが生きているかどうかを試験します。スレッドが起動し、まだ死んでいない場合は生きています。

返り値:
このスレッドが生きている場合 true、 このスレッドが生きていない場合 false
 o suspend
  public final void suspend()
このスレッドを中断します。

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

スレッドは、生きている場合中断され、再開されない限りずっと先に進みません。

例外: SecurityException
現在のスレッドでこのスレッドを修正できない場合
参照:
checkAccess, isAlive
 o resume
  public final void resume()
中断されたスレッドを再開します。

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

スレッドが生きているけれども中断されている場合、スレッドは、再開され、その実行で先に進むことが許されています。

例外: SecurityException
現在のスレッドでこのスレッドを実行できない場合
参照:
checkAccess, isAlive
 o setPriority
  public final void setPriority(int newPriority)
このスレッドの優先順位を変更します。

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

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

例外: IllegalArgumentException
優先順位が範囲 MIN_PRIORITY から MAX_PRIORITY にない場合
例外: SecurityException
現在のスレッドでこのスレッドが修正できない場合
参照:
checkAccess, getPriority, getThreadGroup, MAX_PRIORITY, MIN_PRIORITY, getMaxPriority
 o getPriority
  public final int getPriority()
このスレッドの優先順位を返します。

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

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

パラメータ:
name - このスレッドの新しい名前
例外: SecurityException
現在のスレッドでこのスレッドが修正できない場合
参照:
checkAccess, getName
 o getName
  public final String getName()
このスレッドの名前を返します。

返り値:
このスレッドの名前
参照:
setName
 o getThreadGroup
  public final ThreadGroup getThreadGroup()
このスレッドのスレッドグループを返します。

返り値:
このスレッドのスレッドグループ
 o activeCount
  public static int activeCount()
このスレッドグループの現在アクティブなスレッドの数を返します。

返り値:
このスレッドのスレッドグループの現在のスレッドの数
 o enumerate
  public static int enumerate(Thread tarray[])
このスレッドグループとそのサブグループ内の各アクティブなスレッドを指定された配列の中にコピーします。このメソッドは、単にこのスレッドのスレッドグループの、配列引数が指定された enumerate メソッドを呼び出すだけです。

返り値:
配列の中に格納されるスレッドの数
参照:
enumerate
 o countStackFrames
 public native int countStackFrames()
このスレッド内のスタックフレーム数をカウントします。スレッドは中断される必要があります。

返り値:
このスレッド内のスタックフレームの数
例外: IllegalThreadStateException
このスレッドが中断されない場合
 o join
  public final synchronized void join(long millis) throws InterruptedException
このスレッドが死ぬのを最高で millis ミリ秒待ちます。0 の制限時間は永遠に待機することを意味します。

パラメータ:
millis - ミリ秒単位の待ち時間
例外: InterruptedException
のスレッドが現在のスレッドに割り込んだ場合
 o join
  public final synchronized void join(long millis,
                                      int nanos) throws InterruptedException
最高で millis ミリ秒に nanos ナノ秒を加算した間、このスレッドが死ぬのを待ちます。

パラメータ:
millis - ミリ秒単位の待ち時間
nanos - 0-999999までの追加ナノ秒単位の待ち時間
例外: IllegalArgumentException
millis が負の場合 nanos が範囲 0-999999にない場合
例外: InterruptedException
別のスレッドが現在のスレッドに割り込んだ場合
 o join
  public final void join() throws InterruptedException
このスレッドが死ぬのを待ちます。

例外: InterruptedException
別のスレッドが現在のスレッドに割り込んだ場合
 o dumpStack
  public static void dumpStack()
現在のスレッドのスタックトレースを出力します。このメソッドはデバッグの場合にだけ使用します。

参照:
printStackTrace
 o setDaemon
  public final void setDaemon(boolean on)
このスレッドをデーモンスレッドもしくはユーザスレッドとしてマークします。 Java 仮想マシンは実行しているスレッドがすべてデーモンスレッドの場合にだけ終了します。

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

パラメータ:
on - true である場合、このスレッドをデーモンスレッドとしてマークします。
例外: IllegalThreadStateException
このスレッドがアクティブな場合
参照:
isDaemon
 o isDaemon
  public final boolean isDaemon()
このスレッドがデーモンスレッドであるかどうか試験します。

返り値:
このスレッドがデーモンスレッドである場合 true、 このスレッドがデーモンスレッドではない場合 false
参照:
setDaemon
 o checkAccess
  public void checkAccess()
現在実行中のスレッドがこのスレッドを修正する許可を得ているかどうかを判断します。

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

例外: SecurityException
現在のスレッドがこのスレッドへのアクセスを許されていない場合
参照:
checkAccess
 o toString
  public String toString()
スレッドの名前、優先順位、スレッドグループを含むこのスレッドの文字列表記を返します。

返り値:
このスレッドの文字列表記
オーバーライド:
クラス ObjecttoString

全パッケージ  クラス階層  このパッケージ  前項目  次項目  インデックス