初心者向けのJava講座です。一緒にJavaを勉強しませんか?
はじめてのJava入門初心者向けの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 の値になります。
i == 2になったら
th1.setPriority(1);
th2.setPriority(10);
に変更したことになります。
したがって実行結果はこのようになるのです。