全パッケージ クラス階層 このパッケージ 前項目 次項目 インデックス
java.lang.Object | +----java.lang.Thread
各スレッドは優先順位を持っています。優先順位が高いスレッドの方が、優先順位が低いスレッドより優先して実行されます。また、各スレッドがデーモンとしてマークされていることもあれば、されていないこともあります。あるスレッドで実行中のコードが新しい Thread
オブジェクトを作成すると、この新しいスレッドには、当初、作成側のスレッドの優先順位に等しい優先順位が設定され、作成側スレッドがデーモンである場合にだけ、デーモンスレッドになります。
通常、Java 仮想マシンが起動すると、(一般的にはある指定されたクラスの main
という名前がつけられたメソッドを呼び出す)1つのデーモンスレッドではないスレッドが存在します。 Java 仮想マシンは、以下のどれかが発生するまでスレッドの実行を続行します。
Runtime
のexit
メソッドが呼び出され、セキュリティマネージャが exit 動作を許可しました。
run
メソッドの呼び出しから戻るか、または stop
メソッドを実行することによってデーモンスレッドでないすべてのスレッドが死んでしまいました。
新しい実行のスレッドを作成するには 2 通りの方法があります。最初の方法はクラスを Thread
のサブクラスであると宣言する方法です。このサブクラスは、クラス Thread
の run
メソッドをオーバーライドしなければなりません。そうすればサブクラスのインスタンスは割り当てられ、起動されることができます。例えば、初期値より大きな素数を計算するスレッドは、次に示すように作成できます。
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();
各スレッドは識別するための名前を持ちます。複数のスレッドが同じ名前を持つことがあります。スレッドが作成されたときに名前が指定されないと、スレッドには新しい名前が作成されます。
Thread
オブジェクトを割り当てる。
Thread
オブジェクトを割り当てる。
Thread
オブジェクトを割り当てる。
Thread
オブジェクトを割り当てる。
Thread
オブジェクトを割り当てる。
target
、名前として指定した name
をもつ、group
によって参照されるスレッドグループに属するような、新規Thread
オブジェクトを割り当てる。
Thread
オブジェクトを割り当てる。
millis
ミリ秒の間このスレッドが死ぬのを待つ。
millis
ミリ秒に nanos
ナノ秒を加算した間このスレッドが死ぬのを待つ。
Runnable
オブジェクトを使用して構築された場合、その Runnable
オブジェクトのrun
メソッドが呼び出される。それ以外の場合には、このメソッドは何も実行しないで返す。
name
に等しくなるように変更する。
run
メソッドを呼び出す。
public static final int MIN_PRIORITY
public static final int NORM_PRIORITY
public static final int MAX_PRIORITY
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++; } } }
public Thread(Runnable target)
Thread
オブジェクトを割り当てます。この構築子は、 Thread( null、target、
gname)
と同じ効果を持ちます。この場合gnameは新規に作成される名前です。自動的に作成される名前は、 n が整数とすると"Thread-"+
nの形式を取ります。
run
メソッドが呼び出されるオブジェクト
public Thread(ThreadGroup group, Runnable target)
Thread
オブジェクトを割り当てます。構築子は、 Thread(group、target、
gname)
と同じ効果を持ちます。この場合、 gname は、新規に作成される名前です。自動的に作成される名前は、 n が整数とすると "Thread-"+
n の形式を取ります。
run
メソッドが呼び出されるオブジェクト
public Thread(String name)
Thread( null、 null、name )
と同じ効果を持ちます。
public Thread(ThreadGroup group, String name)
Thread
オブジェクトを割り当てます。この構築子は、 Thread( group、 null、name )
と同じ効果を持ちます。
public Thread(Runnable target, String name)
Thread
オブジェクトを割り当てます。この構築子は、 Thread( null、target、name )
と同じ効果を持ちます。
run
メソッドが呼びされるオブジェクト
public Thread(ThreadGroup group, Runnable target, String name)
target
、名前として指定した name
をもつ、group
によって参照されるスレッドグループに属するような、新規Thread
オブジェクトを割り当てます。
group
が null
ではない場合、そのスレッドグループのcheckAccess
メソッドは引数を指定されずに呼び出されます。このため、SecurityException
がスローされる結果となります。 group
が null
である場合は、新規プロセスは新規スレッドを作成するスレッドと同じグループに属します。
target
引数が null
ではない場合、このスレッドが起動されると target
の run
メソッドが呼び出されます。 target
引数が null
である場合は、このスレッドが起動されるときにこのスレッドの run
メソッドが呼び出されます。
新規に作成されたスレッドの優先順位は、そのスレッドを作成したスレッド、つまり現在実行中のスレッドの優先順位に等しく設定されます。この優先順位を新しい値に変更する場合は、メソッド setPriority
を使用できます。
新規に作成されたスレッドは、それを作成するスレッドがデーモンスレッドとマークされている場合にだけ、デーモンスレッドとマークされます。スレッドがデーモンであるかどうかを変更する場合は、メソッド setDaemon
を使用できます。
run
方法が呼び出されるオブジェクト
public static native Thread currentThread()
public static native void yield()
public static native void sleep(long millis) throws InterruptedException
public static void sleep(long millis, int nanos) throws InterruptedException
public native synchronized void start()
run
メソッドを呼び出します。
その結果、(start
メソッドへの呼び出しから返る)現在のスレッドと(その run
メソッドを実行する)別のスレッドという 2 つのスレッドが並列に実行します。
public void run()
Runnable
実行オブジェクトを使用して構築された場合、その Runnable
オブジェクトの run
メソッドが呼び出されます。それ以外の場合、このメソッドは何も実行しないで返ります。
Thread
のサブクラスは、このメソッドをオーバーライドします。
public final void stop()
まず、このスレッドの checkAccess
メソッドが引数なしで呼び出されます。この結果、(現在のスレッド内で) SecurityException
がスローされることがあります。
このスレッドによって表されるスレッドは、
それが実行していた動作に関係なく強制的に異常停止させられ、新規に作成した ThreadDeath
オブジェクトを例外としてスローします。
まだ起動されていないスレッドを停止することが許可されています。スレッドが最終的に起動すると、ただちに終了します。
アプリケーションは、異常なクリーンアップ動作を実行しなければならない場合を除き、通常は、ThreadDeath
をキャッチすべきではありません(ThreadDeath
をスローすると、スレッドが公式に死ぬ前に try
文の finally
節が実行されることに注意してください)。catch
節が
ThreadDeath
オブジェクトをキャッチする場合、スレッドが実際に死ぬようにオブジェクトをスローし直すことが重要です。
そうでなければキャッチされていない例外を扱う最高レベルのエラーハンドラは、キャッチされていない例外が ThreadDeath
のインスタンスであるならばメッセージを出力したり、アプリケーションに通知しません。
public final synchronized void stop(Throwable o)
まず、このスレッドの checkAccess
メソッドが引数なしで呼び出されます。この結果、(現在のスレッド内で)SecurityException
がスローされることがあります。
引数 obj
が null の場合、NullPointerException
が(現在のスレッド内で)スローされます。
このスレッドによって表されるスレッドは、それが実行する動作には関係なく強制的に異常終了させられ、例外として Throwable
オブジェクト obj
をスローさせられます。これは、普段はとらない動作であるため、通常は引数を設定しない stop
メソッドを使用してください。
まだ起動されていないスレッドを停止することができます。スレッドが最終的に起動されると、すぐに終了します。
public void interrupt()
public static boolean interrupted()
interterrupted
は静的なメソッドですが、 isInterrupted
が現在のThread
のインスタンスで呼び出されることに注意してください。
true
、
現在のスレッドが割り込まれていない場合 false
public boolean isInterrupted()
isInterrupted
が Thread
のインスタンス上で呼び出されるのに対し、 interrupted
は静的なメソッドであることに注意してください。
true
、
このスレッドが割り込まれていない場合 false
public void destroy()
public final native boolean isAlive()
true
、
このスレッドが生きていない場合 false
public final void suspend()
まず、このスレッドのe checkAccess
メソッドが引数なしで呼び出されます。この結果、(現在のスレッド内で)SecurityException
がスローされることがあります。
スレッドは、生きている場合中断され、再開されない限りずっと先に進みません。
public final void resume()
まず、このスレッドの checkAccess
メソッドが、引数なしで呼び出されます。この結果、(現在のスレッド内で) SecurityException
が呼び出されることがあります。
スレッドが生きているけれども中断されている場合、スレッドは、再開され、その実行で先に進むことが許されています。
public final void setPriority(int newPriority)
まず、このスレッドの checkAccess
メソッドが引数なしで呼び出されます。この結果、SecurityException
がスローされることがあります。
それ以外の場合、このスレッドの優先順位は、指定された newPriority
とスレッドのスレッドグループの最高許容優先順位の内のどちらか小さい方に設定されます。
MIN_PRIORITY
から
MAX_PRIORITY
にない場合
public final int getPriority()
public final void setName(String name)
name
に等しくなるように変更します。
まず、このスレッドの checkAccess
メソッドが、引数なしで呼び出されます。この結果、SecurityException
がスローされることがあります。
public final String getName()
public final ThreadGroup getThreadGroup()
public static int activeCount()
public static int enumerate(Thread tarray[])
enumerate
メソッドを呼び出すだけです。
public native int countStackFrames()
public final synchronized void join(long millis) throws InterruptedException
millis
ミリ秒待ちます。0
の制限時間は永遠に待機することを意味します。
public final synchronized void join(long millis, int nanos) throws InterruptedException
millis
ミリ秒に nanos
ナノ秒を加算した間、このスレッドが死ぬのを待ちます。
public final void join() throws InterruptedException
public static void dumpStack()
public final void setDaemon(boolean on)
このメソッドは、スレッド起動前に呼び出す必要があります。
true
である場合、このスレッドをデーモンスレッドとしてマークします。
public final boolean isDaemon()
true
、
このスレッドがデーモンスレッドではない場合 false
public void checkAccess()
セキュリティマネージャが存在する場合、このスレッドをその引数として指定して checkAccess
メソッドが呼び出されます。この結果、 SecurityException
がスローされることがあります。
public String toString()
全パッケージ クラス階層 このパッケージ 前項目 次項目 インデックス