13-5. スレッド優先度


スレッド優先度Threadクラスには、スレッドの実行時間を変更する優先順位というメンバー変数があります.
キースレッドの実行時間が長くなるように優先度を調整できます.
迅速な応答が必要なタスクを処理するスレッドの優先度は高くなければなりません.
 
優先度の指定
優先度はint1-10(数値が大きいほど優先度が高くなります)mainメソッドの優先度は5です.
Threadは作成したThreadから優先順位を継承しますmainメソッドで生成されたスレッドの優先度は同じ5である.
 

  • void setPriority (int newPriority)
    ねじの優先度を指定値に変更

  • int getPriority ()
    スレッドの優先度を返します
  •  
    class ThreadExample {
        public static void main(String[] args) {
            Thread1 t1 = new Thread1();
            Thread2 t2 = new Thread2();
    
            t2.setPriority(7);
            System.out.println("t1: " + t1.getPriority());
            System.out.println("t2: " + t2.getPriority());
    
            t1.start();
            t2.start();
        }
    }
    
    class Thread1 extends Thread {
        public void run() {
            for (int i = 0; i < 1000; i++) {
                System.out.printf("%s", new String("-"));
                for (int x = 0; x < 10000000; x++); // 처리를 지연시키기 위한 빈 반복문
            }
        }
    }
    
    class Thread2 extends Thread {
        public void run() {
            for (int i = 0; i < 1000; i++) {
                System.out.printf("%s", new String("|"));
                for (int x = 0; x < 10000000; x++);
            }
        }
    }
    t1: 5
    t2: 7
    -|-|------------------------------------------------------------------------------------------------------------------------------------------------||||----------||||||||||||||||||||||||||||--------------------------------------------------------------||||||||----------------||||||||||||||||--------------||||----------------------------||||||||||||||------------------------------------------------------------|||||||||||||||||||||||...생략
    既に優先順位に達していますが、Threedを実行していると見えなくなります.
    これは,現在のコンピュータなどのマルチコア環境ではスレッドの優先度に差がないためである.
    カーネルがたくさんあるので、1つのカーネルで優先度割り当てを実行するよりも、複数のカーネルで優先度割り当てを実行します.
    したがって、Threadに優先度を指定するよりも、PriorityQueueにジョブを入れ、優先度に従って処理する.