@634

スレッドの実験 その3

Advertisement

スレッドに優先度を設定するぜ

public class ThreadTest{
    public static void main(String args[]){
        System.out.println("main開始");

        //スレッド A のオブジェクト tha生成
        ThreadA tha = new ThreadA();
        //スレッド B のオブジェクト tha生成
        ThreadB thb = new ThreadB();

        //スレッド A の優先度、最強
        tha.setPriority(Thread.MAX_PRIORITY);

        System.out.println("スレッド A 起動");
        tha.start();    //スレッド A 開始
		
        System.out.println("スレッド B 起動");
        thb.start();    //スレッド B 開始

        try{
            System.out.println("スレッドの終了待ち");
            tha.join();    //thaの終了待ち
            thb.join();    //thbの終了待ち
        }catch(Exception e){
            System.err.println(e);    //なんかエラーの場合
            System.exit(1);
        }

        System.out.println("main終了");
    }
}

class ThreadA extends Thread{    //Threadクラス継承
    //コンストラクタ
    ThreadA(){}

    public void run(){
        for(int i = 0; i < 10; i++){
            System.out.println("スレッドA " + (i+1) + " 回目");
        }
    System.out.println("スレッド A 終了");
    }
}

class ThreadB extends Thread{    //Threadクラス継承
    //コンストラクタ
    ThreadB(){}
	
    public void run(){
        for(int i = 0; i < 10; i++){
            System.out.println("スレッドB " + (i+1) + " 回目");
    }
    System.out.println("スレッド B 終了");
    }
}
スレッドAの優先度を最強に。
他の使い方は一番下。

今回の結果↓
main 開始
スレッド A 起動
スレッドA 1 回目
スレッドA 2 回目
スレッドA 3 回目
スレッドA 4 回目
スレッドA 5 回目
スレッドA 6 回目
スレッドA 7 回目
スレッドA 8 回目
スレッドA 9 回目
スレッドA 10 回目
スレッド A 終了
スレッド B 起動
スレッドの終了待ち
スレッドB 1 回目
スレッドB 2 回目
スレッドB 3 回目
スレッドB 4 回目
スレッドB 5 回目
スレッドB 6 回目
スレッドB 7 回目
スレッドB 8 回目
スレッドB 9 回目
スレッドB 10 回目
スレッド B 終了
main 終了

メソッド・定数

Threadクラスの優先度関係の関数
定義用途
final void setPriority(int val);スレッドに優先度設定
final int getPriority();スレッドの優先度取得

Threadクラスの優先度関係の定数
定数用途
static final int MAX_PRIORITY最強の優先度
static final int NORM_PRIORITY普通の優先度
static final int MIN_PRIORITY最低の優先度

使い方

優先度設定
obj.setPriority(Thread.MAX_PRIORITY);
これで最強。
いまより優先度をひとつあげるなら
obj.setPriority(obj.getPriority()+1);
ややこしそうに見えるけど単純。
今の優先度を取得して、それに1足して設定。

実験

実験。スレッドを2つ生成して両方優先度最強にしてみる。
結果:普通にバラけた。(実験1の結果と同じ)
優先度が同じになっただけだ。

次に2個とも最強にしてから、どちらかの優先度にさらに1足してみる。
tha.setPriority(Thread.MAX_PRIORITY);
thb.setPriority(Thread.MAX_PRIORITY);
thb.setPriority(thb.getPriority() + 1);
結果:実行エラー。
java.lang.IllegalArgumentException
これ(リンク先:java.sun.com)。
■以下引用
例外 : IllegalArgumentException - 優先順位が MIN_PRIORITY 〜 MAX_PRIORITY の範囲外である場合


MIN_PRIORITYとMAX_PRIORITYの定数
ここ(リンク先:java.sun.com)。
MIN_PRIORITYが1、MAX_PRIORITYが10。ちなみにNORM_PRIORITYは5。

Advertisement

ショートカット

634
このカテゴリのトップページに戻る
634labs
   UIコレクションギャラリー

サイト検索

Google

Web サイト内

Y!ログール