スレッド優先度|Javaから楽しく学ぶ!ゲームプログラミング専門学校

Javaから楽しく学ぶ!ゲームプログラミング専門学校

ゲームプログラミングとはその名のとおりゲームのプログラムを作ることを指します。『Javaから楽しく学ぶ!ゲームプログラミング専門学校』ではゲームプログラミングについて、実際にゲームプログラムをJAVAプログラミング言語を使用し、作成していきながら詳しく解説していきます。

スレッド優先度

スレッドを複数起動させた場合、通常CPU資源の割り当ては均等になります。
しかし、すばやい処理を要求されるスレッドには、他のスレッドよりも優先して処理してほしい場合があるかもしれません。

今回はスレッドの優先度について見ていきます。


Javaではスレッドに優先度をつけるしくみが備わっています。
複数のスレッドが起動している場合、高い優先度を持たせているスレッドが優先して資源を割り当てられます。

public class Counter implements Runnable{
private String counterName;
private static int count = 0;

public Counter(String counterName){
this.counterName = counterName;
}

public static void main(String[] args){
Counter ct1 = new Counter("カウンタ1");
Counter ct2 = new Counter("カウンタ2");

Thread th1 = new Thread(ct1);
Thread th2 = new Thread(ct2);
th1.setPriority(Thread.MIN_PRIORITY);
th2.setPriority(Thread.MAX_PRIORITY);
th1.start();
th2.start();

}

public void run(){
for(int i = 0; i < 10000; i++){
count ++;
}
System.out.println(this.counterName + " " + "スレッド終了");
}
}

上記サンプルでは、優先度の違う二つのカウンタスレッドを起動させ、
10000回のループ処理が二つのスレッドのうちどちらが早く終了するかを見比べています。

優先度の設定は、1〜10までの範囲を設定できます。
        th1.setPriority(Thread.MIN_PRIORITY);
th2.setPriority(Thread.MAX_PRIORITY);

優先度の設定はsetPriority()メソッドを使用します。

定数『MIN_PRIORITY』は最低の優先度である数値1、
定数『MAX_PRIORITY』は最高の優先度である数値10
を示しています。

※デフォルトでは5(=NORM_PRIORITY)が与えられています。


ここまでの説明では一見、優先度を最高として設定しているth2の方が早く終了するように思えますが、実はそうとは限りません。

優先度の違いによる資源の割り当ては、OSやJava仮想マシンによって大きく依存します。
つまり、高い優先度を設定したスレッドが優先される実行環境もあれば、まったく優先されない実行環境もあるということです。

実際、私の環境(Windows Vista)で上記サンプルコードを実行してみましたが、スレッドの優先度設定を最低としているth1の方が10回中8回、早く終了しました。


このようなことからsetPriority()メソッドによるスレッドの優先度を設定する方法は使わない方が無難です。
トラックバック:0Edit
Copyright © Javaから楽しく学ぶ!ゲームプログラミング専門学校 All Rights Reserved.
当サイトのテキストや画像等すべての転載転用・商用販売を固く禁じます