java.lang.Object | +--java.lang.Thread
スレッドとは、プログラム内での実行のスレッドのことです。Java Virtual Machine では、アプリケーションは並列に実行される複数のスレッドを使用することができます。
各スレッドには優先順位が付けられています。優先順位の高いスレッドは、優先順位の低いスレッドよりも優先して実行されます。
新しい実行のスレッドを作成するには 2 通りの方法があります。1 つの方法は、クラスを 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();
スレッドを作成するもう 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();
Runnable
,
Runtime.exit(int)
,
run()
フィールドの概要 | |
static int |
MAX_PRIORITY
スレッドに設定できる最高優先順位です。 |
static int |
MIN_PRIORITY
スレッドに設定できる最低優先順位です。 |
static int |
NORM_PRIORITY
スレッドに割り当てられるデフォルトの優先順位です。 |
コンストラクタの概要 | |
Thread()
新しい Thread オブジェクトを割り当てます。 |
|
Thread(Runnable target)
新しい Thread オブジェクトを割り当てます。 |
メソッドの概要 | |
static int |
activeCount()
VM に存在する現在アクティブなスレッドの数を返します。 |
static Thread |
currentThread()
現在実行中のスレッドオブジェクトの参照を返します。 |
int |
getPriority()
このスレッドの優先順位を返します。 |
boolean |
isAlive()
このスレッドが生存しているかどうかを判定します。 |
void |
join()
このスレッドが終了するのを待機します。 |
void |
run()
このスレッドが別個の Runnable 実行オブジェクトを使用して作成された場合、その Runnable オブジェクトの run メソッドが呼び出されます。 |
void |
setPriority(int newPriority)
このスレッドの優先順位を変更します。 |
static void |
sleep(long millis)
現在実行中のスレッドを、指定されたミリ秒数の間、スリープ (一時的に実行を停止) させます。 |
void |
start()
このスレッドの実行を開始します。 |
String |
toString()
スレッドとその優先順位を示す固有の番号を含む、このスレッドの文字列表現を返します。 |
static void |
yield()
現在実行中のスレッドオブジェクトを一時的に休止させ、ほかのスレッドが実行できるようにします。 |
クラス java.lang.Object から継承したメソッド |
equals,
getClass,
hashCode,
notify,
notifyAll,
wait,
wait,
wait |
フィールドの詳細 |
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++; } } }
Runnable
public Thread(Runnable target)
Thread
オブジェクトを割り当てます。このコンストラクタは、Thread(null, target,
gname)
と同じ効果を持ちます。この場合、gname は、新しく作成される名前です。自動的に作成される名前は、n を整数とすると "Thread-"+
n の形式をとります。target
- その run
メソッドが呼び出されるオブジェクトメソッドの詳細 |
public static Thread currentThread()
public static void yield()
public static void sleep(long millis) throws InterruptedException
millis
- ミリ秒単位のスリープ時間の長さObject.notify()
public void start()
run
メソッドを呼び出します。
その結果、(start
メソッドへの呼び出しから復帰する) 現在のスレッドと (その run
メソッドを実行する) 別のスレッドという 2 つのスレッドが並列に実行されます。
run()
public void run()
Runnable
実行オブジェクトを使用して作成された場合、その Runnable
オブジェクトの run
メソッドが呼び出されます。そうでない場合、このメソッドは何も行わずに復帰します。
Thread
のサブクラスは、このメソッドをオーバーライドしなければなりません。
start()
,
Runnable.run()
public final boolean isAlive()
true
、そうでない場合は false
public final void setPriority(int newPriority)
newPriority
- このスレッドを設定する優先順位MIN_PRIORITY
〜 MAX_PRIORITY
の範囲外である場合getPriority()
,
getPriority()
,
MAX_PRIORITY
,
MIN_PRIORITY
public final int getPriority()
setPriority(int)
,
setPriority(int)
public static int activeCount()
public final void join() throws InterruptedException
public String toString()