初心者向けのJava講座です。一緒にJavaを勉強しませんか?
はじめてのJava入門初心者向けのJava講座 |
yield()メソッド
同じ優先順位の他のスレッドに実行の機会を与えるメソッドがyield()メソッドです。
つまり実行中のスレッドがyield()メソッドを呼び出すと、まずそのスレッドと同じ優先順位のスレッドがあるかを探します。
もし同じ優先順位のスレッドがあった場合はyieldメソッドを呼び出したスレッドは
実行可能状態になり同じ優先順位のスレッドが実行されるまで待機状態になります。
同じ優先順位のスレッドが見つからなければそのまま実行されます。
yield()メソッドもstaticメソッドです。 呼び出し方は Thread.yield() です。ではサンプルプログラムで確認します。
サンプルプログラム(Sample107.java)
class ThreadSample107 extends Thread{ public void run(){ for(int i = 0; i < 5; i++){ System.out.println("はじめての"); } } }
class ThreadSample107_1 extends Thread{ public void run(){ for(int i = 0; i < 5; i++){ System.out.println("java入門"); } } }
class Sample107{ public static void main(String args[]){ ThreadSample107 th1 = new ThreadSample107(); ThreadSample107_1 th2 = new ThreadSample107_1(); th1.start(); th2.start(); } }
プログラムをコピーする場合すべて選択をクリックしてください。
Sponsored link
コンパイル・実行してみます。
スレッドを2つ作成してそれをmain()メソッド内でstrat()メソッドを使い呼び出しています。
ちなみに優先度の設定はしていないのでともにデフォルトで5になります。
これをyield()メソッドを使ったサンプルを見てみます。
サンプルプログラム(YieldSample107.java)
class Yield extends Thread{ public void run(){ for(int i = 0; i < 5; i++){ System.out.println("はじめての"); if(i == 1){ Thread.yield(); } } } }
class Yield_1 extends Thread{ public void run(){ for(int i = 0; i < 5; i++){ System.out.println("java入門"); } } } class YieldSample107{ public static void main(String args[]){ Yield th1 = new Yield(); Yield_1 th2 = new Yield_1(); th1.start(); th2.start();
} }
プログラムをコピーする場合すべて選択をクリックしてください。
Sponsored link
コンパイル・実行します
つまり今回は
if(i == 1){Thread.yield();
}
が実行権の放棄の処理を行っています。
つまり最初のスレッド内では
i の値が 1 と等しくなったら同じ優先度のスレッドに実行の機会を与えあなたはそのまま待機しておいてください。
同じ優先度のスレッドが全て終了したならば実行してもかまいません。という意味になります。
ためしにif文の中の値を変えて実行してみてください。
結果が変わってくると思います。