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

Javaでスレッドのwait()メソッドとwait(long)メソッドを呼び出すことができるのはいつですか?


wait()のときはいつでも メソッドがオブジェクトで呼び出されると、現在のスレッドは別のスレッドが notify()を呼び出すまで待機します。 またはnotifyAll() wait(long timeout)に対して、このオブジェクトのメソッド 現在のスレッドは、別のスレッドが notify()を呼び出すまで待機します。 またはnotifyAll() このオブジェクトのメソッド、または指定されたタイムアウト時間が経過しました。

wait()

以下のプログラムでは、 wait()の場合 オブジェクトで呼び出されると、スレッドは実行状態から待機状態になります。 。他のスレッドがnotify()を呼び出すのを待ちます またはnotifyAll() 実行可能な状態、デッドロックに入ることができるように 形成されます。

class MyRunnable implements Runnable {
   public void run() {
      synchronized(this) {
         System.out.println("In run() method");
         try {
            this.wait();
            System.out.println("Thread in waiting state, waiting for some other threads on same object to call notify() or notifyAll()");
         } catch (InterruptedException ie) {
            ie.printStackTrace();
         }
      }
   }
}
public class WaitMethodWithoutParameterTest {
   public static void main(String[] args) {
       MyRunnable myRunnable = new MyRunnable();
       Thread thread = new Thread(myRunnable, "Thread-1");
       thread.start();
   }
}

出力

In run() method


wait(long)

以下のプログラムでは、When wait(1000) オブジェクトで呼び出されると、スレッドは実行状態から待機状態になります。 notify()であっても またはnotifyAll() タイムアウト時間が経過した後は呼び出されません。スレッドは待機状態から実行可能状態になります。

class MyRunnable implements Runnable {
   public void run() {
      synchronized(this) {
         System.out.println("In run() method");
         try {
            this.wait(1000); 
            System.out.println("Thread in waiting state, waiting for some other threads on same object to call notify() or notifyAll()");
         } catch (InterruptedException ie) {
            ie.printStackTrace();
         }
      }
   }
}
public class WaitMethodWithParameterTest {
   public static void main(String[] args) {
      MyRunnable myRunnable = new MyRunnable();
      Thread thread = new Thread(myRunnable, "Thread-1");
      thread.start();
   }
}

出力

In run() method
Thread in waiting state, waiting for some other threads on same object to call notify() or notifyAll()

  1. Javaでpack()メソッドを使用できるのはいつですか?

    pack() メソッドはウィンドウで定義されています Javaのクラスであり、すべてのコンテンツが適切なサイズ以上になるようにフレームのサイズを設定します。 pack()の代替 メソッドは、 setSize()を呼び出して、フレームサイズを明示的に確立することです。 またはsetBounds() メソッド。通常、 pack()を使用します setSize()よりもメソッドを呼び出す方が望ましい パックはフレームレイアウトマネージャーにフレームサイズを任せ、レイアウトマネージャーはプラットフォームの依存関係やコンポーネントサイズに影響を与えるその他の要因にうまく適応できるためです。 構文 p

  2. JavaでThread.start()の代わりにThread.run()を呼び出すのはいつですか?

    start()を呼び出すとき スレッドのメソッドにより、スレッドは実行を開始し、 run() スレッドのメソッドは、Java仮想マシン(JVM)によって呼び出されます。 。 run()を直接呼び出す場合 メソッドの場合、通常として扱われます オーバーライドされたメソッド スレッドクラス(または実行可能なインターフェイス)の場合、新しいスレッドではなく、現在のスレッドのコンテキスト内で実行されます。 例 public class CallRunMethodTest extends Thread {    @Override    public void