Threadの状態は、次の4つに大きく分けられます。
この状態は、スレッドが、コンストラクタで生成されたばかりの状態です。
この状態は、startメソッドによって、スレッドの実行が開始された状態です。 「Runnable」となっていて、「Running」でないのは、先にも見たように、 startがかかったスレッドは、どれも同時に実行されるのではなく、あるルールに したがって実行順序が制御され、ある場合には実行を延期されるからです。
Runnable な状態は、次の4つの場合、Not Runnable という第三の状態に 移行します。
Not Runnable 状態が、再び、Runnable 状態に戻る為には、先の四つの ケースに対応する、次の条件が満たされなければなりません。
スレッドが死ぬのには、二つの場合があります。
第一の場合は、スレッドの実行が完全に終了して、自然に死ぬ場合です。
第二の場合は、メソッドstop()が呼ばれて強制的に殺される場合です。
スレッドの状態を知るメソッドに、isAlive()があります。
isAlive()は、スレッドが起動されて、かつ、ストップされていなければ、 trueを返します。要するに、スレッドの状態が、Runnnable あるいは、 Not Runnableの状態の時には、isAlive()は真となります。 逆に、スレッドが New Thread あるいは、Dead の状態の時には、 isAlive()は、falseを返します。