Java -スレッドの状態-
スレッドの状態
スレッドを複数作成することにより、並行処理を行うことができます。
ただし、CPUがひとつの場合、スレッドは同時に一つしか実行できません。
スレッドはJVMのスケジューラによって制御され、「実行中」、「実行可能状態」、「終了状態」といった状態になります。
スレッドは優先順位の高いものから「実行中」の状態になります。
実行中のスレッドはsleep・join・waitなどのメソッドにより、実行不可能の状態になり、解除されると再び実行可能な状態になりますが、すぐに実行中になる保証はありません。
runメソッドが終了するとメソッドも終了します。
スレッドの優先順位
スレッドには優先順位が設定されており、順位の高いものが優先的に実行中となります。
ただし、自分より優先順位の高いスレッドが作成されていても実行中のスレッドがただちに終了するとは限りません。
定数 | 値 |
---|---|
Thread.MIN_PRIORITY | 1 |
Thread.NORM_PRIORITY | 5 |
Thread.MAX_PRIORITY | 10 |
優先順位は、プログラム中でsetPriorityメソッドにより変更できます。
また、getPriorityメソッドによって確認できます。
sleepメソッド
sleepメソッドを利用すると現在実行中のスレッドを一時停止させることができます。
引数に指定したミリ秒間、実行不可能状態となり、他の実行可能状態のスレッドが実行中になります。
sleepメソッドを利用するには例外処理が必要です。
joinメソッド
joinメソッドを利用すると指定したスレッドが終了するまでスレッドを待機させることができます。
待機中のスレッドは実行不可能状態となり指定したスレッドの終了を待ち、その後に実行可能な状態になります。 スレッドの終了待ち時間の最大値は設定可能です。
yieldメソッド
yieldメソッドは現在実行中のスレッドを一時休止できます。
他のスレッドに譲った後はすぐに実行可能状態になります。
sleepメソッドと異なり他に実行スレッドがない場合や他のスレッドの方が順位が低い場合は一時休止しているスレッドが直ちに実行中の状態に戻ります。
yieldメソッドは他のスレッドに実行権限を譲りたい場合に利用します。