Javaによるスレッドのスケジューリング


CPUの数がスレッドの数よりも少ない環境では、スレッドを切り替えながら処理を進めることになる。CPUが1つでスレッドが3本あるときは、3本のスレッドのうちの1本が選ばれて実行されることになる。スレッドのスケジューリングについて、Javaの仕様では細かく規定されておらず、プログラムからも細かく指定することは出来ない。スレッドがどのようにスケジューリングされても正常に動くようにコーディングする必要がある。

プログラムからスケジューリングに関して指定できるのは、「優先度」と「切り替え」の2つになる。用意されている関数と定数は次のようになる。

Thread.MIN_PRIORITY: 最低の優先度

Thread.NORM_PRIORITY: 通常の優先度

Thread.MAX_PRIORITY: 最高の優先度

getPriority() : 優先度の取得

setPriority(): 優先度の設定

yield(): スレッドの切り替え

優先度の高いスレッドは、他のスレッドよりも多く実行される一方、同じ優先度のスレッドがそれぞれ同じ程度に実行される保障はない。yield()は、他に実行可能なスレッドがある場合のみ、実行スレッドを切り替える。同じ優先度のスレッドがそれぞれ同じ程度に実行されるようにするためには、プログラムでyield()を呼び出してスレッドを切り替えなければならない。

 


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です