|
生成
|
| (1). |
new演算子によりスレッドオブジェクトが生成されます。生成段階ではまだスレッドオブジェクトにシステム資源は割り当てられていません。 |
|
実行可能
|
| (2). |
startメソッドの実行によりスレッドは実行可能状態になります。この状態になりスレッドオブジェクトにシステム資源が割り当てられます。 |
|
実行
|
| (3). |
Javaを実行するシステムのスケジュール機能に従い、実行可能状態にあるスレッドのうち1つが実行(CPUが1つの場合)されます。この時、runメソッドが実行されます。 |
| (4)-1. |
Javaを実行するシステムのスケジュールに従い、より優先度の高いスレッドが実行されたり、タイムスケジュールにより他のスレッドが実行された場合、現在実行されているスレッドは実行可能状態となり、再び実行状態になるのを待ちます。 |
| (4)-2. |
yieldメソッドは同一優先度のメソッドが実行可能状態にある場合、実行状態であるyeildメソッドを呼び出したスレッドを実行可能状態にし、他の実行可能状態にあるスレッドを実行状態にするためのものです。システムのスケジュール機能にも依存しますが、より低い優先度のスレッドが実行可能状態にある場合は、yieldメソッドは無視されます。 |
|
実行不可
何らかの処理により実行状態にあるスレッドが実行状態でなくなります(実行不可状態)。この間、他のスレッドが実行状態になります。
|
| |
sleep |
| |
(5)-1.
(6)-1. |
sleepメソッドを実行したスレッドはsleepメソッドで指定した時間の間実行不可状態となります。指定した時間が経過した後、そのスレッドは再び実行可能状態となり、実行状態となるのを待ちます。 |
| |
wait |
| |
(5)-2.
(6)-2. |
waitメソッドを実行したスレッドは実行不可状態となり、他のスレッドからnotifyメソッド、notifyAllメソッドが呼び出されるとそのスレッドは再び実行可能状態となります。waitメソッド、notifyメソッド、notifyAllメソッドの詳細はスレッドの同期で説明します。 |
| |
入出力ブロック |
| |
(5)-3.
(6)-3. |
他のシステムからのデータの読み込みなどの入出力関連処理において、他のシステムの状況によってはその読み込み処理に多くの時間がかかる場合があります。そのような処理を実行しているスレッドは、場合によっては実行不可状態となり、他のスレッドに実行状態が取って代わります。入出力処理が終了した段階でそのスレッドは再び実行可能状態となります。 |
| |
ロック |
| |
(5)-4.
(6)-4. |
スレッドがsynchronized指定された処理を実行する際、他のスレッドがすでにsynchronized指定された処理を実行していた場合、後から実行しようとしたスレッドはロックされ、実行不可状態となります。他のスレッドのsynchronized指定された処理が終了した段階でロックが解除され、再び実行可能状態となります。synchronizedの詳細はスレッドの同期で説明します。 |
|
終了
|
| (7). |
runメソッドに記載される処理が終了した時点で、スレッドも終了します。1度終了したスレッドを再び実行することはできません。1度終了したスレッドオブジェクトに対し、再びstartメソッドを実行しても何も起きません。 |