next up previous
Next: 16.4 スレッドのキャンセル cancellation Up: 16 スレッドのスケジューリング Previous: 16.2 スレッドの実行終了

16.3 スレッドのライフサイクル

スレッドのライフサイクルは図4のように 実行可能状態(Runnable)に入ってからrunメソッドが終了するまで 続く.
図 4: スレッドのライフサイクル
\includegraphics[width=8cm]{/home/inaba/eps/lecture/fig/LifeCycleThread.eps}
ひとつのスレッドは,4つのいずれかの状態にいることになります.
  1. 生成状態(new) 生成されているがまだstartされていない状態.
  2. 実行可能状態(runnable) CPUサイクルが利用可能になれば実行できる状態.
  3. 死んでいる状態(dead) runからreturnすることで終了状態に入る.stop()メソッドもあるが 推奨されていない(deprecated).destroy()メソッドもあるが,オブジェクトの ロックを解除しないため,避けられるならば呼ばない方がいい.
  4. ブロック状態(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日