Java中的wait()和notify()是兩個非常重要的方法,主要用于線程的同步選擇,本文將介紹它們的具體用法。
public class ThreadDemo { public synchronized void waitThread() { try { System.out.println("線程A開始等待..."); wait(); System.out.println("線程A繼續執行..."); } catch (InterruptedException e) { e.printStackTrace(); } } public synchronized void notifyThread() { System.out.println("線程B開始執行..."); notify(); System.out.println("線程B執行完畢..."); } }
代碼中,wait()方法和notify()方法都是在一個線程中使用,所以需要使用synchronized進行同步控制。
在waitThread()方法中,當線程調用wait()方法后,該線程會阻塞并釋放掉它持有的鎖,等待其他線程調用notify()方法。當其他線程執行了notify()方法后,該線程就會恢復執行。
在notifyThread()方法中,該線程執行了notify()方法后,會喚醒任意一個等待該對象鎖的線程,使它恢復執行。
使用wait()和notify()時,需要注意以下幾點:
- wait()和notify()方法必須在同步方法或同步塊中使用。
- notify()方法只能喚醒一個等待該對象鎖的線程,如果要喚醒所有等待線程,需要使用notifyAll()方法。
- 當線程調用wait()方法時,它會釋放掉它持有的鎖,但不釋放對象鎖。