next up previous contents
Next: MultiThreaded Programs Up: Thread Previous: 簡単なサンプル

Thread Priority

むしろ、プログラムの本体が終わっているに、スレッドがきちんと、startが かかった順番に実行されているのが不思議かも知れません。 これには、実は、理由があります。スレッドには、実行の優先順位が決められている のですが、何も指定しないと、そのスレッドには、デフォールトの実行順位が割り当 てられます。先の3つの例で、3つのスレッドは、同一の順位がつけられていた 訳です。

UNIXのJavaでは、スレッドは、優先順位の高い順に実行されます。順位の低い スレッドは、順位の高いスレッドの実行が完全に終わるまで待たされることに なります。また、同一順位のスレッドは、一つずつ順番に実行されます。 先の例では、同じ順位のスレッドが、順番に実行された訳です。

スレッド実行の優先順位を、「プライオリティ」と呼んでいます。 通常は、1から10までの数字が割り当てられています。デフォールト値は、5です。 それぞれのスレッドに、メソッド setPriority() でプライオリティの設定が 可能です。

次のSample3は、配列priorityの値を使って、各スレッドにプライオリティを設定 するように、先のサンプルに少し、手を入れたものです。 このプログラムの出力を予想して見てください。

class Sample3 extends Thread {
    static int loop = 3 ;
    static int priority[] = { 1, 2, 3 };

    public void run() {
        for( int i=1 ; i < 5  ; i++ ) {
            System.out.println( getName() +  ": " +  i + "; " );
        }
    }

    public static void main(String args[]) {
        for (int i = 0; i < loop ; i++) {
            Sample3 s = new Sample3();
            s.setPriority(priority[i]);
            s.start();
        }
    }
}

このプログラムの出力は、次のようになります。 まずプライオリティの設定ですが、最初のスレッドには1が、次のスレッドには2が、 最後のスレッドには3が設定されることになりますので、最後のスレッドの優先順位が 一番高くなり、結局一番最初に実行されます。最初のスレッドの優先順位は1でしたの で最も低く、最後に実行されることになります。

        Thread-6: 1;
        Thread-6: 2;
        Thread-6: 3;
        Thread-6: 4;
        Thread-5: 1;
        Thread-5: 2;
        Thread-5: 3;
        Thread-5: 4;
        Thread-4: 1;
        Thread-4: 2;
        Thread-4: 3;
        Thread-4: 4;



maruyama@wakhok.ac.jp