|
Foundation 1.1.2 | |||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.lang.Thread
public class Thread
「スレッド」とは、プログラム内での実行スレッドのことです。Java 仮想マシンでは、アプリケーションは並列に実行される複数のスレッドを使用することができます。
各スレッドには優先順位が付けられています。優先順位の高いスレッドは、優先順位の低いスレッドよりも優先して実行されます。さらに、各スレッドがデーモンとしてマークされている場合もあれば、されていない場合もあります。あるスレッドで実行中のコードが新しい Thread
オブジェクトを作成すると、この新しいスレッドには、その時点では、作成側のスレッドの優先順位に等しい優先順位が設定され、作成側スレッドがデーモンである場合にだけ、デーモンスレッドになます。
通常、Java 仮想マシンが起動する (一般的にはある指定されたクラスの main
という名前が付けられたメソッドを呼び出す) と、デーモンスレッドではないスレッドが 1 つ存在します。Java 仮想マシンは、次のどれかの条件が発生するまでスレッドを実行し続けます。
Runtime
クラスの exit
メソッドが呼び出され、セキュリティーマネージャーが exit 動作を許可した場合
run
メソッドの呼び出しから復帰することによって、または run
メソッド以外から送られる例外をスローすることによって、デーモンスレッドではないすべてのスレッドが終了した場合
新しい実行のスレッドを作成するには 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 オブジェクトを割り当てます。 |
|
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()
現在実行中のスレッドが、このスレッドを変更するためのアクセス権を持っているかどうかを判定します。 |
static Thread |
currentThread()
現在実行中のスレッドオブジェクトの参照を返します。 |
void |
destroy()
クリーンアップを行わないでこのスレッドを破棄します。 |
static void |
dumpStack()
現在のスレッドのスタックトレースを出力します。 |
static int |
enumerate(Thread[] tarray)
現行スレッドのスレッドグループおよびその下位グループ内のすべてのアクティブなスレッドを、指定された配列にコピーします。 |
ClassLoader |
getContextClassLoader()
この Thread のコンテキスト ClassLoader を返します。 |
String |
getName()
このスレッドの名前を返します。 |
int |
getPriority()
このスレッドの優先順位を返します。 |
ThreadGroup |
getThreadGroup()
このスレッドが所属するスレッドグループを返します。 |
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 |
run()
このスレッドが別個の Runnable 実行オブジェクトを使用して作成された場合、その Runnable オブジェクトの run メソッドが呼び出されます。 |
void |
setContextClassLoader(ClassLoader cl)
この Thread のコンテキスト ClassLoader を設定します。 |
void |
setDaemon(boolean on)
このスレッドを、デーモンスレッドまたはユーザースレッドとしてマークします。 |
void |
setName(String name)
このスレッドの名前を引数 name に等しくなるように変更します。 |
void |
setPriority(int newPriority)
このスレッドの優先順位を変更します。 |
static void |
sleep(long millis)
現在実行中のスレッドを、指定されたミリ秒数の間、スリープ (一時的に実行を停止) させます。 |
static void |
sleep(long millis,
int nanos)
現在実行中のスレッドを、指定されたミリ秒数に指定されたナノ秒数を加算した間、スリープ (実行を停止) させます。 |
void |
start()
このスレッドの実行を開始します。 |
String |
toString()
スレッドの名前、優先順位、スレッドグループを含むこのスレッドの文字列表現を返します。 |
static void |
yield()
現在実行中のスレッドオブジェクトを一時的に休止させ、ほかのスレッドが実行できるようにします。 |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, 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 の形式を取ります。
java.lang.Thread#Thread(java.lang.ThreadGroup,
public Thread(Runnable target)
Thread
オブジェクトを割り当てます。このコンストラクタは、Thread(null, target,
gname)
と同じ効果を持ちます。この場合、gname は、新しく作成される名前です。自動的に作成される名前は、n を整数とすると "Thread-"+
n の形式を取ります。
target
- その run
メソッドが呼び出されるオブジェクトjava.lang.Thread#Thread(java.lang.ThreadGroup,
public Thread(ThreadGroup group, Runnable target)
Thread
オブジェクトを割り当てます。このコンストラクタは、Thread(group, target,
gname)
と同じ効果を持ちます。この場合、gname は、新しく作成される名前です。自動的に作成される名前は、n を整数とすると "Thread-"+
n の形式を取ります。
group
- スレッドグループtarget
- その run
メソッドが呼び出されるオブジェクト
SecurityException
- 現在のスレッドが、指定されたスレッドグループ内のスレッドを作成できない場合java.lang.Thread#Thread(java.lang.ThreadGroup,
public Thread(String name)
Thread
オブジェクトを割り当てます。このコンストラクタは、Thread(null, null, name)
と同じ効果を持ちます。
name
- 新しいスレッドの名前java.lang.Thread#Thread(java.lang.ThreadGroup,
public Thread(ThreadGroup group, String name)
Thread
オブジェクトを割り当てます。このコンストラクタは、Thread(group, null, name)
と同じ効果を持ちます。
group
- スレッドグループname
- 新しいスレッドの名前
SecurityException
- 現在のスレッドが、指定されたスレッドグループ内のスレッドを作成できない場合java.lang.Thread#Thread(java.lang.ThreadGroup,
public Thread(Runnable target, String name)
Thread
オブジェクトを割り当てます。このコンストラクタは、Thread(null, target, name)
と同じ効果を持ちます。
target
- その run
メソッドが呼び出されるオブジェクトname
- 新しいスレッドの名前java.lang.Thread#Thread(java.lang.ThreadGroup,
public Thread(ThreadGroup group, Runnable target, String name)
target
、名前として指定された name
を持つ、group
によって参照されるスレッドグループに属するような、新しい Thread
オブジェクトを割り当てます。
group
が null
で、セキュリティーマネージャーが存在する場合、グループはセキュリティーマネージャーの getThreadGroup
メソッドにより決まります。group
が null
でセキュリティーマネージャーが存在しない場合、またはセキュリティーマネージャーの getThreadGroup
メソッドが null
を返す場合、グループは新規スレッドを作成中のスレッドと同じ ThreadGroup に設定されます。
セキュリティーマネージャーが存在する場合は、ThreadGroup を引数として渡して checkAccess
メソッドを呼び出します。その結果、SecurityException が発生することがあります。
target
引数が null
ではない場合、このスレッドが起動されると target
の run
メソッドが呼び出されます。target 引数が null
である場合は、このスレッドが起動されるときにこのスレッドの run
メソッドが呼び出されます。
新しく作成されたスレッドの優先順位は、そのスレッドを作成したスレッド、つまり現在実行中のスレッドの優先順位と同じに設定されます。この優先順位を新しい値に変更する場合は、setPriority
メソッドを使用できます。
新しく作成されたスレッドは、それを作成するスレッドがデーモンスレッドとマークされている場合にだけ、デーモンスレッドとマークされます。スレッドがデーモンであるかどうかを変更する場合は、setDaemon
メソッドを使用できます。
group
- スレッドグループtarget
- その run
メソッドが呼び出されるオブジェクトname
- 新しいスレッドの名前
SecurityException
- 現在のスレッドが、指定されたスレッドグループ内のスレッドを作成できない場合Runnable.run()
,
run()
,
setDaemon(boolean)
,
setPriority(int)
,
ThreadGroup.checkAccess()
,
SecurityManager.checkAccess(java.lang.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
- 現在のスレッドが、指定されたスレッドグループ内のスレッドを作成できない場合メソッドの詳細 |
---|
public static Thread currentThread()
public static void yield()
public static void sleep(long millis) throws InterruptedException
millis
- ミリ秒単位のスリープ時間の長さ
InterruptedException
- 別のスレッドが現在のスレッドに割り込んだ場合。この例外がスローされると、現在のスレッドの「割り込みステータス」はクリアされるObject.notify()
public static void sleep(long millis, int nanos) throws InterruptedException
millis
- ミリ秒単位のスリープ時間の長さnanos
- スリープするための 0 〜 999999 の追加ナノ秒
IllegalArgumentException
- millis の値が負数の場合、または nanos の値が 0 〜 999999 の範囲外の場合
InterruptedException
- 別のスレッドが現在のスレッドに割り込んだ場合。この例外がスローされると、現在のスレッドの「割り込みステータス」はクリアされるObject.notify()
public void start()
run
メソッドを呼び出します。
その結果、(start
メソッドへの呼び出しから復帰する) 現在のスレッドと (その run
メソッドを実行する) 別のスレッドという 2 つのスレッドが並列に実行されます。
IllegalThreadStateException
- スレッドがすでに起動していた場合run()
public void run()
Runnable
実行オブジェクトを使用して作成された場合、その Runnable
オブジェクトの run
メソッドが呼び出されます。そうでない場合、このメソッドは何も行わずに復帰します。
Thread
のサブクラスは、このメソッドをオーバーライドしなければなりません。
Runnable
内の run
start()
,
java.lang.Thread#Thread(java.lang.ThreadGroup,
,
Runnable.run()
public void interrupt()
最初に、このスレッドの checkAccess
メソッドが呼び出されます。このメソッドにより、SecurityException
がスローされる場合があります。
このメソッドにより、SecurityException
がスローされる場合があります。 Object
クラスの wait()
、wait(long)
、または wait(long, int)
メソッドの呼び出し、またはこのクラスの join()
、join(long)
、join(long, int)
、sleep(long)
、または sleep(long, int)
メソッドの呼び出しでこのスレッドがブロックされる場合、割り込みステータスはクリアされ、InterruptedException
を受け取ります。
前述の条件のどれにも当てはまらない場合、このスレッドの割り込みステータスが設定されます。
SecurityException
- 現在のスレッドがこのスレッドを変更できない場合public static boolean interrupted()
true
、そうでない場合は false
isInterrupted()
public boolean isInterrupted()
true
、そうでない場合は false
interrupted()
public void destroy()
public final boolean isAlive()
true
、そうでない場合は false
public final void setPriority(int newPriority)
まず、このスレッドの checkAccess
メソッドが、引数なしで呼び出されます。その結果、SecurityException
がスローされることがあります。
そうでない場合、このスレッドの優先順位は、指定された newPriority
とスレッドのスレッドグループの最高許容優先順位の内のどちらか小さい方に設定されます。
newPriority
- このスレッドを設定する優先順位
IllegalArgumentException
- 優先順位が MIN_PRIORITY
〜 MAX_PRIORITY
の範囲外である場合
SecurityException
- 現在のスレッドがこのスレッドを変更できない場合getPriority()
,
checkAccess()
,
getPriority()
,
getThreadGroup()
,
MAX_PRIORITY
,
MIN_PRIORITY
,
ThreadGroup.getMaxPriority()
public final int getPriority()
setPriority(int)
,
setPriority(int)
public final void setName(String name)
name
に等しくなるように変更します。
まず、このスレッドの checkAccess
メソッドが、引数なしで呼び出されます。その結果、SecurityException
がスローされることがあります。
name
- このスレッドの新しい名前
SecurityException
- 現在のスレッドがこのスレッドを変更できない場合getName()
,
checkAccess()
,
getName()
public final String getName()
setName(java.lang.String)
,
setName(java.lang.String)
public final ThreadGroup getThreadGroup()
public static int activeCount()
public static int enumerate(Thread[] tarray)
enumerate
メソッドを、配列引数を指定して呼び出すだけです。
セキュリティーマネージャーが存在する場合、enumerate
メソッドは、スレッドグループを引数としてセキュリティーマネージャーの checkAccess
メソッドを呼び出します。その結果、SecurityException
がスローされることがあります。
tarray
- Thread オブジェクトのコピー先配列
SecurityException
- セキュリティーマネージャーが存在し、セキュリティーマネージャーの checkAccess
メソッドがこの操作を許可しない場合ThreadGroup.enumerate(java.lang.Thread[])
,
SecurityManager.checkAccess(java.lang.ThreadGroup)
public final void join(long millis) throws InterruptedException
millis
ミリ秒待機します。
のタイムアウトは永遠に待機することを意味します。
millis
- ミリ秒単位の待機時間
InterruptedException
- 別のスレッドが現在のスレッドに割り込んだ場合。この例外がスローされると、現在のスレッドの「割り込みステータス」はクリアされるpublic final void join(long millis, int nanos) throws InterruptedException
millis
ミリ秒に nanos
ナノ秒を加算した間、このスレッドが終了するのを待機します。
millis
- ミリ秒単位の待機時間nanos
- 待機するための 0 〜 999999 の追加ナノ秒
IllegalArgumentException
- millis の値が負数の場合、または nanos の値が 0 〜 999999 の範囲外の場合
InterruptedException
- 別のスレッドが現在のスレッドに割り込んだ場合。この例外がスローされると、現在のスレッドの「割り込みステータス」はクリアされるpublic final void join() throws InterruptedException
InterruptedException
- 別のスレッドが現在のスレッドに割り込んだ場合。この例外がスローされると、現在のスレッドの「割り込みステータス」はクリアされるpublic static void dumpStack()
Throwable.printStackTrace()
public final void setDaemon(boolean on)
このメソッドは、スレッド起動前に呼び出す必要があります。
このメソッドは、引数なしでこのスレッドの checkAccess
メソッドを呼び出します。この結果、現在のスレッドで SecurityException
がスローされることがあります。
プロセスモデルが存在する場合は、Thread.setDaemon() を J2SE 仕様の定義に従って使用してください。
プロセスモデルが存在しない場合、プログラマが優れたコーディング技術を使って a) System.exit() の呼び出し、またはすべてのユーザースレッドの終了、あるいはその両方が実行される前に、デーモンスレッドが存在してリソースをクリーンアップすることを保証する、および b) セキュリティーマネージャーのデフォルト動作を上書きして、System.exit() の呼び出し時に SecurityException をスローすることができるなら、Thread.setDaemon() を使用してスレッドをデーモンスレッドとして設定してください。
on
- true
の場合、このスレッドをデーモンスレッドとしてマークする
IllegalThreadStateException
- このスレッドがアクティブな場合
SecurityException
- 現在のスレッドがこのスレッドを変更できない場合isDaemon()
,
checkAccess()
public final boolean isDaemon()
true
、そうでない場合は false
setDaemon(boolean)
public final void checkAccess()
セキュリティーマネージャーが存在する場合、このスレッドがその引数に指定されて checkAccess
メソッドが呼び出されます。その結果、SecurityException
がスローされることがあります。
注:このメソッドが JDK 1.1 では final でなかったのは誤りです。Java 2 プラットフォームでは final になっています。
SecurityException
- 現在のスレッドがこのスレッドへのアクセスを許されていない場合SecurityManager.checkAccess(java.lang.Thread)
public String toString()
Object
内の toString
public ClassLoader getContextClassLoader()
セキュリティーマネージャーが存在する場合、呼び出し側のクラスローダーが null ではなく、コンテキストクラスローダーを要求されているスレッドのコンテキストクラスローダーと同じでなく、そのコンテキストクラスローダーの祖先でもないときは、コンテキスト ClassLoader を取得してもよいかどうかを確認するために、RuntimePermission("getClassLoader")
アクセス権を使って、セキュリティーマネージャーの checkPermission
メソッドが呼び出されます。
SecurityException
- セキュリティーマネージャーが存在し、セキュリティーマネージャーの checkPermission
メソッドがコンテキスト ClassLoader の取得を許可しない場合setContextClassLoader(java.lang.ClassLoader)
,
SecurityManager.checkPermission(java.security.Permission)
,
RuntimePermission
public void setContextClassLoader(ClassLoader cl)
セキュリティーマネージャーが存在する場合、最初に、コンテキスト ClassLoader を設定してよいかどうかを調べるために RuntimePermission("setContextClassLoader")
アクセス権を使って checkPermission
メソッドが呼び出されます。
cl
- この Thread のコンテキスト ClassLoader
SecurityException
- 現在のスレッドがコンテキスト ClassLoader を設定できない場合getContextClassLoader()
,
SecurityManager.checkPermission(java.security.Permission)
,
RuntimePermission
public static boolean holdsLock(Object obj)
このメソッドは、次のように、プログラムが、現行スレッドが指定されたロックをすでに保持していることを示す際に使用されます。
assert Thread.holdsLock(obj);
obj
- 所有権のロックをテストするオブジェクト
NullPointerException
- obj が null の場合
|
Foundation 1.1.2 | |||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。