next up previous
Next: 16.6 スレッドの終了待ち joinメソッド Up: 16 スレッドのスケジューリング Previous: 16.4 スレッドのキャンセル cancellation

16.5 自発的な再スケジューリング sleep,yieldメソッド

スレッドがCPUの使用を手放すのを可能とするいくつかのメソッドとして, sleep, yieldなどがThreadクラスにある.

public static void sleep(long millisec)
      throws InterruptedException

public static void sleep(long millisec, int nanosec) 
      throws InterruptedException

public static void yield();
yieldメソッドは,現在実行中のスレッドを一旦とめて,他のスレッドが 実行されることを許すためのメソッドで,その時点でカレントスレッドを実行さ せる必要がないということをスケジューラに伝える.

// Babble.java
class Babble extends Thread {
    static boolean doYield;
    static int howOften;

    private String word;

    Babble(String whatToSay) {
        word = whatToSay;
    }

    public void run() {
        for (int i=0;
             i < howOften; i++) {
            System.out.println(word);
            if (doYield)
                Thread.yield();
        }
    }

    public static void main(String[] args) {
        doYield =
            new Boolean(args[0]).booleanValue();

        howOften = Integer.parseInt(args[1]);

        for (int i=2; i < args.length; i++) {
            new Babble(args[i]).start();
        }
    }
}
実行すると次のようになる.

% java Babble false 2 Did DidNot
Did
Did
DidNot
DidNot
% java Babble true 2 Did DidNot
Did
DidNot
Did
DidNot

% java Babble true 4 Did DidNot
Did
Did
DidNot
Did
DidNot
Did
DidNot
DidNot
% java Babble true 4 Did DidNot
Did
DidNot
Did
DidNot
Did
DidNot
Did
DidNot
% java Babble faulse 4 Did DidNot
Did
Did
Did
Did
DidNot
DidNot
DidNot
DidNot
% java Babble fauls 4 Did DidNot
Did
Did
Did
Did
DidNot
DidNot
DidNot
DidNot
% java Babble fauls 4 Did DidNot
Did
Did
Did
Did
DidNot
DidNot
DidNot
DidNot
% java Babble fau 4 Did DidNot
Did
Did
Did
Did
DidNot
DidNot
DidNot
DidNot


generated through LaTeX2HTML. M.Inaba 平成18年5月7日