next up previous contents
Next: ThreadGroup Up: Thread Previous: MultiThreaded Programs

Threadのステータス

Threadの状態は、次の4つに大きく分けられます。

  1. New Thread
  2. Runnable
  3. Not Runnable
  4. Dead

New Thread

この状態は、スレッドが、コンストラクタで生成されたばかりの状態です。

Runnable

この状態は、startメソッドによって、スレッドの実行が開始された状態です。 「Runnable」となっていて、「Running」でないのは、先にも見たように、 startがかかったスレッドは、どれも同時に実行されるのではなく、あるルールに したがって実行順序が制御され、ある場合には実行を延期されるからです。

Not Runnable

Runnable な状態は、次の4つの場合、Not Runnable という第三の状態に 移行します。

  1. sleep()メソッドが呼ばれた場合。
  2. suspend()メソッドが呼ばれた場合。
  3. スレッドが、条件変数を待つ、wait()メソッドを使った場合。
  4. スレッドが、入出力でブロックされた場合。

Not Runnable 状態が、再び、Runnable 状態に戻る為には、先の四つの ケースに対応する、次の条件が満たされなければなりません。

  1. sleep()メソッドが呼ばれて Not Runnable 状態になった場合には、 sleep()で指定された時間が経過する必要があります。
  2. suspend()メソッドが呼ばれて Not Runnable 状態になった場合には、 resume()メソッドが呼ばれなければなりません。
  3. wait()で待たされている場合には、notify()あるいは、notifyAll() が呼ばれなければなりません。
  4. 入出力でのブロックは、入出力が終わるまで待たされます。

Dead

スレッドが死ぬのには、二つの場合があります。

第一の場合は、スレッドの実行が完全に終了して、自然に死ぬ場合です。

第二の場合は、メソッドstop()が呼ばれて強制的に殺される場合です。

isAlive()

スレッドの状態を知るメソッドに、isAlive()があります。

isAlive()は、スレッドが起動されて、かつ、ストップされていなければ、 trueを返します。要するに、スレッドの状態が、Runnnable あるいは、 Not Runnableの状態の時には、isAlive()は真となります。 逆に、スレッドが New Thread あるいは、Dead の状態の時には、 isAlive()は、falseを返します。



maruyama@wakhok.ac.jp