|
JavaTM 2 Platform Std. Ed. v1.3 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object | +--java.lang.Thread
スレッドとは、プログラム内での実行のスレッドのことです。Java Virtual Machine では、アプリケーションは並列に実行される複数のスレッドを使用することができます。
各スレッドには優先順位が付けられています。優先順位の高いスレッドは、優先順位の低いスレッドよりも優先して実行されます。さらに、各スレッドがデーモンとしてマークされている場合もあれば、されていない場合もあります。あるスレッドで実行中のコードが新しい Thread
オブジェクトを作成すると、この新しいスレッドには、その時点では、作成側のスレッドの優先順位に等しい優先順位が設定され、作成側スレッドがデーモンである場合にだけ、デーモンスレッドになます。
通常、Java Virtual Machine が起動すると、(一般的にはある指定されたクラスの main
という名前が付けられたメソッドを呼び出す) 1 つのデーモンスレッドではないスレッドが存在します。Java Virtual Machine は、以下のどれかが発生するまでスレッドを実行し続けます。
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()
,
stop()
フィールドの概要 | |
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,
String name)
新しい Thread オブジェクトを割り当てます。 |
メソッドの概要 | |
static int |
activeCount()
このスレッドグループの現在アクティブなスレッドの数を返します。 |
void |
checkAccess()
現在実行中のスレッドが、このスレッドを変更するためのアクセス権を持っているかどうかを判定します。 |
int |
countStackFrames()
推奨されていません。 この呼び出しの定義は、推奨されない suspend() に依存します。また、この呼び出しの結果は保証されません。 |
static Thread |
currentThread()
現在実行中のスレッドオブジェクトの参照を返します。 |
void |
destroy()
クリーンアップを行わないでこのスレッドを破棄します。 |
static void |
dumpStack()
現在のスレッドのスタックトレースを出力します。 |
static int |
enumerate(Thread[] tarray)
このスレッドのスレッドグループおよびその下位グループ内のすべてのアクティブなスレッドを、指定された配列にコピーします。 |
ClassLoader |
getContextClassLoader()
この Thread のコンテキスト ClassLoader を返します。 |
String |
getName()
このスレッドの名前を返します。 |
int |
getPriority()
このスレッドの優先順位を返します。 |
ThreadGroup |
getThreadGroup()
このスレッドが所属するスレッドグループを返します。 |
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)
このスレッドを、デーモンスレッドまたはユーザスレッドとしてマークします。 |
void |
setName(String name)
このスレッドの名前を引数 name に等しくなるように変更します。
|
void |
setPriority(int newPriority)
このスレッドの優先順位を変更します。 |
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 |
フィールドの詳細 |
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++; } } }
Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String)
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)
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)
public Thread(String name)
Thread
オブジェクトを割り当てます。このコンストラクタは、Thread(null, null, name)
と同じ効果を持ちます。name
- 新しいスレッドの名前Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String)
public Thread(ThreadGroup group, String name)
Thread
オブジェクトを割り当てます。このコンストラクタは、Thread(group, null, name)
と同じ効果を持ちます。group
- スレッドグループname
- 新しいスレッドの名前SecurityException
- 現在のスレッドが、指定されたスレッドグループ内のスレッドを作成できない場合Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String)
public Thread(Runnable target, String name)
Thread
オブジェクトを割り当てます。このコンストラクタは、Thread(null, target, name)
と同じ効果を持ちます。target
- その run
メソッドが呼び出されるオブジェクトname
- 新しいスレッドの名前Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String)
public Thread(ThreadGroup group, Runnable target, String name)
target
、名前として指定された name
を持つ、group
によって参照されるスレッドグループに属するような、新しい Thread
オブジェクトを割り当てます。
group
が 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 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()
,
stop()
public void run()
Runnable
実行オブジェクトを使用して作成された場合、その Runnable
オブジェクトの run
メソッドが呼び出されます。そうでない場合、このメソッドは何も行わずに復帰します。
Thread
のサブクラスは、このメソッドをオーバーライドしなければなりません。
Runnable
内の run
start()
,
stop()
,
Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String)
,
Runnable.run()
public final void 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
,
ThreadGroup.uncaughtException(java.lang.Thread, java.lang.Throwable)
,
SecurityManager.checkAccess(Thread)
,
SecurityManager.checkPermission(java.security.Permission)
public final void stop(Throwable obj)
stop()
(引数なし) を参照してください。さらに、このメソッドは、ターゲットスレッドで処理の準備ができていない例外の生成に使用されることがある点でも危険です (このメソッドがなければスレッドによりスローされることのない、チェックされた例外など)。詳細は、「Thread.stop、Thread.suspend、および Thread.resume が推奨されない理由」を参照してください。
セキュリティマネージャがインストールされている場合、セキュリティマネージャの checkAccess
メソッドが呼び出されます。この結果、現在のスレッドで SecurityException
がスローされることがあります。
また、このスレッドが現在のスレッドと異なる場合、つまり、現在のスレッドが自分以外のスレッドを停止しようとしている場合、または obj
が ThreadDeath
のインスタンスでない場合は、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)
public void interrupt()
まず、このスレッドの checkAccess
メソッドが、引数なしで呼び出されます。この結果、SecurityException
がスローされることがあります。
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 suspend()
resume
を呼び出す前にこのモニターをロックしようとすると、デッドロックが発生します。通常、そのようなデッドロックは、自身を「フリーズした」プロセスとして表明します。詳細は、「Thread.stop、Thread.suspend、および Thread.resume が推奨されない理由」を参照してください。
まず、このスレッドの checkAccess
メソッドが、引数なしで呼び出されます。この結果、(現在のスレッド内で) SecurityException
がスローされることがあります。
スレッドは、生存している場合に中断され、再開されない処理を先に進めることはできません。
SecurityException
- 現在のスレッドがこのスレッドを変更できない場合checkAccess()
public final void resume()
suspend()
とともに使用するためだけに提供されています。詳細は、「Thread.stop、Thread.suspend、および Thread.resume が推奨されない理由」を参照してください。
まず、このスレッドの checkAccess
メソッドが、引数なしで呼び出されます。 この結果、(現在のスレッド内で) SecurityException
がスローされることがあります。
スレッドは、生存しているが中断されている場合、実行が再開されて処理を先に進めることが許可されます。
SecurityException
- 現在のスレッドがこのスレッドを変更できない場合checkAccess()
,
suspend()
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 int countStackFrames()
suspend()
に依存します。また、この呼び出しの結果は保証されません。
IllegalThreadStateException
- このスレッドが中断されない場合public final void join(long millis) throws InterruptedException
millis
ミリ秒待機します。0
のタイムアウトは永遠に待機することを意味します。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
がスローされることがあります。
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 のコンテキスト ClassLoaderSecurityException
- 現在のスレッドがコンテキスト ClassLoader を設定できない場合getContextClassLoader()
,
SecurityManager.checkPermission(java.security.Permission)
,
RuntimePermission
|
JavaTM 2 Platform Std. Ed. v1.3 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Java、Java 2D、JDBC は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2000 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.