HOME> Javaアプリケーション講座> スレッド>スレッドの優先順位の変更

スレッドの優先順位の変更

前回はスレッドの優先順位について説明しました。
ここでは、そのスレッドの優先順位の変更を見ていきます。

前に説明しましたがスレッドが終了するときはrun()内の処理が終わったときでした。
実はスレッドはそのrun()内であればいつでも優先度の変更が出来ます。
つまり最初は優先度を高くしてその後優先度を低くすることも可能なのです。

次のサンプルを見てみます。

サンプルプログラム(Sample105.java )

class ThreadSample105 extends Thread{
   int a;
  String str;
ThreadSample105(int a,String str){
  this.a = a;
  this.str = str;
}
  public void run(){  
   for(int i = 0; i < 5; i++){
      try{

    System.out.println(str);
   Thread.sleep(1000);
 }catch(InterruptedException e){}
    if(i == 2){
      setPriority(a);
       }
     }
  }
}

class Sample105{
    public static void main(String args[]){

      ThreadSample105 th1 = new ThreadSample105(1,"1");
      ThreadSample105 th2 = new ThreadSample105(10,"10");

      th1.setPriority(10);
      th2.setPriority(1);

     th1.start();
     th2.start();
} }

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行します。

ここでは優先度の異なるスレッドを2つ作成しています。
それをif文を使い優先度を変更しています。

プログラムの説明をします。 じっくり考えればわかると思いますが、ここではrun()メソッド内ではfor文が行われています。

まずは通常通り
th1.setPriority(10) --------優先度(高い)
th2.setPriority(1)----------優先度(低い)

がstrat()メソッドにより実行されます。

しかし、for文の中で

if(i == 2){
setPeriority(a);
}

を定義しています。

ここの a の値に注目してください。

a はコンストラクタの引数です。

ThreadSample105 th1 = new ThreadSample105(1,"1);
ThreadSample105 th2 = new ThreadSample105(10,"10);
今青くなってる部分が a の値になります。

つまりif文の中の処理で優先度の変更したわけです。
i == 2になったら
th1.setPriority(1);
th2.setPriority(10);
に変更したことになります。
したがって実行結果はこのようになるのです。

ページのトップへ戻る