Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaの同時実行性– yield()メソッド


歩留まり関数

この関数は、実行に時間がかかりすぎて重要ではないスレッドではなく、より重要なスレッドが最初に実行されるようにします。

スレッドがjava.lang.Thread.yieldメソッドを呼び出すとき、それはスレッドスケジューラがその実行を一時停止することを示します。スレッドスケジューラは、この指示を受け入れるか無視するかを選択します。

スレッドが「yield」関数を実行する場合、スケジューラーは、同じかそれ以上の優先順位を持つスレッドが存在するかどうかを確認します。その場合、現在のスレッドは実行可能または準備完了状態に移行し、そのスレッドにはプロセッサリソースが与えられます。

歩留まり関数の構文

public static native void yield()

例を見てみましょう-

import java.lang.*;
class Demo extends Thread{
   public void run(){
      for (int i=0; i<3 ; i++)
      System.out.println("In control of " + Thread.currentThread().getName() + " thread");
   }
}
public class Demo_one{
   public static void main(String[]args){
      Demo my_obj = new Demo();
      my_obj.start();
      for (int i=0; i<3; i++){
         Thread.yield();
         System.out.println("In control of " + Thread.currentThread().getName() + " thread");
      }
   }
}

出力

In control of main thread
In control of main thread
In control of main thread
In control of Thread-0 thread
In control of Thread-0 thread
In control of Thread-0 thread

Demoという名前のクラスは、Threadクラスを拡張します。ここでは、要素のセットを反復処理し、「getName」関数を使用してスレッドの名前を取得する「run」関数が定義されています。 「Demo_one」という名前のクラスは、新しいインスタンスが作成され、「start」関数を使用して開始されるメイン関数を定義します。ここでも、要素が繰り返され、yield関数がスレッドで呼び出されます。

  • スレッドがyieldメソッドを使用して実行を完了すると、プロセッサリソースを奪い合う多くのスレッドが存在します。最初に実行するスレッドを指定する方法はありません。

  • スレッドがyieldメソッドを実行すると、実行状態から実行可能状態になります。

  • イールドメソッドは、プラットフォームがプリエンプティブスケジューリングをサポートしている場合にのみ使用できます。

  • スレッドが実行中に一時停止した場合、遅かれ早かれチャンスを確実に得る方法はありません。それはすべて、スケジューリングアルゴリズムとスレッドスケジューラに依存します。


  1. JavaでのisDaemon()メソッドの重要性?

    デーモンスレッドは優先度の低いスレッドです バックグラウンドで実行され、ほとんどがガベージコレクション(GC)などのバックグラウンドタスクを実行するためにJVMによって作成されるJavaで。 ユーザースレッドが実行されていない場合、デーモンスレッドが実行されていても、JVMは終了できます。デーモンスレッドの唯一の目的は、ユーザースレッドにサービスを提供することです。 isDaemon() メソッドを使用して、スレッドがデーモンスレッドであるかどうかを判断できます。 構文 Public boolean isDaemon() 例 class SampleThread implements R

  2. Java8でのインターフェースの機能強化

    Java 8では、インターフェースにデフォルトのメソッド実装の新しい概念が導入されています。この機能は下位互換性のために追加されているため、古いインターフェースを使用してJava8のラムダ式機能を活用できます。 たとえば、「List」または「Collection」インターフェースには「forEach」メソッド宣言がありません。したがって、このようなメソッドを追加すると、コレクションフレームワークの実装が壊れてしまいます。 Java 8ではデフォルトのメソッドが導入されているため、List / CollectionインターフェースはforEachメソッドのデフォルトの実装を持つことができ、これ