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

Javaでのwait()、notify()、notifyAll()メソッドの重要性は?


スレッドは、 wait()、notify()を介して相互に通信できます。 およびnotifyAll() Javaのメソッド。これらは最終です オブジェクトで定義されたメソッド クラスであり、同期内からのみ呼び出すことができます コンテクスト。 wait() メソッドを使用すると、現在のスレッドは、別のスレッドが notify()を呼び出すまで待機します。 またはnotifyAll() そのオブジェクトのメソッド。 notify() メソッド単一のスレッドをウェイクアップ そのオブジェクトのモニターで待機しています。 notifyAll() メソッドすべてのスレッドをウェイクアップ そのオブジェクトのモニターを待っています。スレッドは、 wait()のいずれかを呼び出すことにより、オブジェクトのモニターで待機します 方法。これらのメソッドはIllegalMonitorStateExceptionをスローする可能性があります 現在のスレッドがオブジェクトのモニターの所有者でない場合。

wait()メソッドの構文
public final void wait() throws InterruptedException

notify()メソッドの構文

public final void notify()
NotifyAll()メソッドの構文
public final void notifyAll()
public class WaitNotifyTest {
   private static final long SLEEP_INTERVAL = 3000;
   private boolean running = true;
   private Thread thread;
   public void start() {
      print("Inside start() method");
      thread = new Thread(new Runnable() {
         @Override
         public void run() {
            print("Inside run() method");
            try {
               Thread.sleep(SLEEP_INTERVAL);
            } catch(InterruptedException e) {
               Thread.currentThread().interrupt();
            }
            synchronized(WaitNotifyTest.this) {
               running = false;
               WaitNotifyTest.this.notify();
            }
         }
      });
      thread.start();
   }
   public void join() throws InterruptedException {
      print("Inside join() method");
      synchronized(this) {
         while(running) {
            print("Waiting for the peer thread to finish.");
            wait(); //waiting, not running
         }
         print("Peer thread finished.");
      }
   }
   private void print(String s) {
      System.out.println(s);
   }
   public static void main(String[] args) throws InterruptedException {
      WaitNotifyTest test = new WaitNotifyTest();
      test.start();
      test.join();
   }
}
出力
Inside start() method
Inside join() method
Waiting for the peer thread to finish.
Inside run() method
Peer thread finished.

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

    歩留まり関数 この関数は、実行に時間がかかりすぎて重要ではないスレッドではなく、より重要なスレッドが最初に実行されるようにします。 スレッドがjava.lang.Thread.yieldメソッドを呼び出すとき、それはスレッドスケジューラがその実行を一時停止することを示します。スレッドスケジューラは、この指示を受け入れるか無視するかを選択します。 スレッドが「yield」関数を実行する場合、スケジューラーは、同じかそれ以上の優先順位を持つスレッドが存在するかどうかを確認します。その場合、現在のスレッドは実行可能または準備完了状態に移行し、そのスレッドにはプロセッサリソースが与えられます。

  2. Java 9でのdestroyForcibly()メソッドの重要性?

    destroyForcibly() メソッドを使用してプロセスを強制終了できます 。プロセスが終了またはフリーズした場合に必要になります。たとえば、 isAlive() destroyForcibly()の後にメソッドはtrueを返します と呼ばれます。 destroyForcibly() メソッドは、終了が正常に要求された場合はtrueを返し、それ以外の場合はfalseを返します。 構文 boolean destroyForcibly() 以下の例では、メモ帳を起動できます。 アプリケーションであり、 destroyForcibly()の後に終了します メソッドが呼び出されました。 例