さて、昨日に引き続き、Javaのスレッドの勉強です。
昨日はスレッドの方法と排他制御でした。
今日はスレッドの他の制御について。
スレッドには優先度を付けることができるようです。
複数のスレッド間で資源が競合した際、高い優先度を持つスレッドのほうから優先して実行されます。優先度は1〜10で設定でき、10が最優先のようです。
Test test = new Test(); // runnableを実装したクラスを想定 Thread thread = new Thread(test); int priority = thread.getPriority(); thread.setPriority(Thread.MAX_PRIORITY); // 10 thread.setPriority(Thread.MIN_PRIORITY); // 1 thread.setPriority(Thread.NORM_PRIORITY); // 5
ただ、資源の割り当て方はOSやJava仮想マシンの実装に大きく依存するらしく、Windowsではそれなりに機能するようですが、Linuxではほとんど意味をなしてないとのこと(ただし、参考にしている本は2003年の本なので、この情報は古いかもしれない)。ちゃんとしたプログラムを作る場合は、優先度の設定に依存するのではなく、自力でなんとかしたほうがよさそうです。