1. 程式人生 > 程式設計 >Java多執行緒通訊wait()和notify()程式碼例項

Java多執行緒通訊wait()和notify()程式碼例項

1.wait()方法和sleep()方法:

wait()方法在等待中釋放鎖;sleep()在等待的時候不會釋放鎖,抱著鎖睡眠。

2.notify():

隨機喚醒一個執行緒,將等待佇列中的一個等待執行緒從等待佇列中移到同步佇列中。

程式碼如下

public class Demo_Print {
  public static void main(String[] args) {
    Print p = new Print();
    new Thread() {
      public void run() {
        while (true) {
          p.print1();
        }
      };
    }.start();

    new Thread() {
      public void run() {
        while (true) {
          p.print2();
        }
      };
    }.start();
  }
}

class Print {
  int flag = 1;

  public synchronized void print1() {
    if (flag != 1) {
      try {
        this.wait();
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    System.out.print("你");
    System.out.print("好");
    System.out.print("嗎????????????");
    System.out.println();

    flag = 2;
    this.notify();
  }

  public synchronized void print2() {
    if (flag != 2) {
      try {
        this.wait();
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    System.out.print("我");
    System.out.print("好");
    System.out.println();

    flag = 1;
    this.notify();
  }
}

在該案例中,實現一問一答的執行緒同步通訊。當方法中開啟了wait()方法後,通過改變flag的值來喚醒執行緒進而實行另一個方法。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。