- 1.1. スレッドとは
- 1.2. マルチスレッド
- 1.3. スレッドのライフサイクル
- 1.4. 複数のスレッドの関係
1.3. スレッドのライフサイクル
Javaのスレッドは、作成されてから消滅するまでにいくつかの状態を遷移していきます。状態の遷移を図に表すと、次のようになります。
初期状態
新しいスレッドを作成した状態です。この状態ではまだスレッドは動作していません。次の章で説明するstart メソッドにより、実行可能状態となります。
実行可能状態
スレッドが動作している状態です。この状態は、さらに「実行中」と「実行準備完了」の2つの状態に分けられます。「実行中」は、時分割処理によって実際にCPUによって処理が実行されている状態です。通常のCPUが1つしかないコンピュータでは、「実行中」のスレッドは同時には最大で1つだけしか存在しません。その他のスレッドは「実行準備完了」状態で、CPU時間が割り当てられるのを待機しています。
ブロック状態
ディスクの入出力操作や、スレッドの排他制御や同期処理などにより、スレッドの動作が一時的に休止している状態です。ブロック状態となっている原因が解消されれば「実行可能状態」に戻ります。スレッドは、動作中に何度も「実行可能状態」と「ブロック状態」を行き来することができます。
終了状態
スレッドの処理が終了した状態です。一度終了状態になったスレッドは、再び動作を開始することはありません。
1.4. 複数のスレッドの関係
複数のスレッドがそれぞれまったく関係ない処理をしているときは、特にそれらのスレッド間の関係を意識する必要がありません。しかし、複数のスレッドが同じオブジェクトを操作したり、協調して処理を行う場合には、スレッド間の相互作用に注意しなければいけません。
ある処理を、他のスレッドに邪魔されないようにあるスレッドだけで独占して実行することを「排他制御」といいます。また、複数のスレッド間で待ち合わせしたり、処理のタイミングを合わせることを「同期」といいます。Javaでは排他制御や同期を行うためのさまざまな方法が用意されています。