Java多執行緒間的通訊
阿新 • • 發佈:2021-01-11
常用方法:
- 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();
}
}
}
}
}