1. 程式人生 > 其它 >Java多執行緒間的通訊

Java多執行緒間的通訊

技術標籤:java多執行緒多執行緒java

常用方法:

  • wait():呼叫此方法的執行緒進入阻塞狀態,並且釋放同步鎖。
  • notify():喚醒被wait的執行緒,如果有多個執行緒被wait,那麼喚醒優先順序更高的。
  • notifyAll():話逆行所有被wait的執行緒。

注意:

  • wait()、notify()、notifyAll()都只能在同步塊或者同步方法中使用。
  • wait()、notify()、notifyAll()是宣告在Object類中的方法。
  • wait()、notify()、notifyAll()的呼叫者必須是同步程式碼塊或同步方法中的同步監視器,否則會丟擲IllegalMonitorStateException異常

程式碼實現:

/**
 * @author panghu
 * @description 利用執行緒間的通訊實現兩執行緒交替列印1,2,3,4...100
 * @create 2021-01-10-9:37
 */
public class ThreadCommunicate {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        Thread t1 = new Thread(myThread);
        Thread t2 = new Thread(myThread)
; t1.setName("執行緒1"); t2.setName("執行緒2"); t1.start(); t2.start(); } } class MyThread implements Runnable { private int num = 1; @Override public void run() { while (num <= 100) { synchronized (this) { // 喚醒被wait的執行緒
notify(); System.out.println(Thread.currentThread().getName() + ":" + num); num++; try { // 當前執行緒進入阻塞狀態,並且釋放同步監視器 wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } }