4. スレッドの制御
マルチスレッドプログラミング 4章 スレッドの制御
- 4.1. 優先度の設定
- 4.2. スレッドの休止・中断
- 4.3. 推奨されないメソッド
- 4.4. スレッドを停止させるには
4.1. 優先度の設定
すべてのスレッドは優先度を持っています。資源が競合した際、一般的に高い優先度を持つスレッドの方が優先的に実行されます。
スレッドの優先度はgetPriorityメソッドで取得する事ができます。
Thread thread = new Thread(runnable); System.out.println(thread.getPriority()); thread.start();
優先度を設定するにはsetPriorityメソッドを用います。引数に優先度を表す数字を指定しますが、この値は「Thread.MAX_PRIORITY」「Thread.MIN_PRIORITY」クラス変数で定義されている最小値(1)から最大値(10)の範囲に収まるものでなければなりません。なおデフォルトで与えられる優先度は「5」であり、この値は「Thread.NORM_PRIORITY」クラス変数に定義されています。
thread.setPriority(Thread.MAX_PRIORITY); thread.setPriority(2);
優先度の違いによる資源の割り当て方は、OSやJava仮想マシンの実装に大きく依存します。高い優先度を設定すると、ある程度は優先的に実行されるかもしれませんが、もしかしたら実際には全く優先されないかもしれません。万が一にも優先度の低いスレッドが優先度の高いスレッドより先に実行されたら困るような場面では、この優先度の仕組みを使うべきではありません。
(実習課題1)
2章の実習課題2のプログラムで以下の点を試しなさい。可能であればLinuxとWindowsの両方で動作させ、優先度を設定したときの動作に違いがあるかどうかを確認すること。
- それぞれのスレッドに異なる優先度を設定する事。
- 設定した優先度の違いに応じて、結果がどのようになるか確かめる事。