Next: 16.4 スレッドのキャンセル cancellation
Up: 16 スレッドのスケジューリング
Previous: 16.2 スレッドの実行終了
スレッドのライフサイクルは図4のように
実行可能状態(Runnable)に入ってからrunメソッドが終了するまで
続く.
ひとつのスレッドは,4つのいずれかの状態にいることになります.
- 生成状態(new)
生成されているがまだstartされていない状態.
- 実行可能状態(runnable)
CPUサイクルが利用可能になれば実行できる状態.
- 死んでいる状態(dead)
runからreturnすることで終了状態に入る.stop()メソッドもあるが
推奨されていない(deprecated).destroy()メソッドもあるが,オブジェクトの
ロックを解除しないため,避けられるならば呼ばない方がいい.
- ブロック状態(blocked)
スレッドは実行されても良かったが,それを妨げる何かが存在する状態.
スレッドがブロック状態にある間は,スケジューラはそのスレッドを単純にスキッ
プし,CPU時間を割り当てることはしない.スレッドが再度実行可能
状態に入るまでは何の処理も行われない.
スレッドが生きているかどうかを調べるisAliveを使った例を示す.
// isalive.java
class CustomThread3 extends Thread
{
CustomThread3(String name)
{
super(name);
start();
}
public void run()
{
try {
for(int loop_index = 0;
loop_index < 4; loop_index++) {
System.out.println(
(Thread.
currentThread()).getName()
+ " thread here...");
Thread.sleep(1000);
}
} catch (InterruptedException e) {}
System.out.println(
(Thread.currentThread()).getName() +
" ending.");
}
}
class isalive
{
public static void main(String args[])
{
CustomThread3 thread1 =
new CustomThread3("first");
CustomThread3 thread2 =
new CustomThread3("second");
CustomThread3 thread3 =
new CustomThread3("third");
CustomThread3 thread4 =
new CustomThread3("fourth");
System.out.println(thread1.isAlive());
try {
thread1.join();
thread2.join();
thread3.join();
thread3.join();
} catch (InterruptedException e) {}
System.out.println(thread1.isAlive());
}
}
generated through LaTeX2HTML. M.Inaba 平成18年5月7日