在Java中,notify()和wait()是用于線程間通信的兩個(gè)方法。notify()方法用于喚醒正在等待該對(duì)象鎖的某個(gè)線程,而wait()方法用于使線程等待該對(duì)象的鎖。
public synchronized void notify()
notify()方法是在同步塊內(nèi)部調(diào)用的,用于喚醒正在該對(duì)象上等待的某個(gè)線程。如果沒(méi)有線程在等待該對(duì)象,則該方法不會(huì)起作用。
public synchronized void wait() throws InterruptedException
wait()方法也是在同步塊內(nèi)部調(diào)用的,用于使當(dāng)前線程等待該對(duì)象的鎖,直到其他線程調(diào)用該對(duì)象的notify()或notifyAll()方法將其喚醒。
以下是一個(gè)使用notify()和wait()方法的示例:
public class ThreadDemo { public static void main(String[] args) { final Object lock = new Object(); Thread t1 = new Thread() { public void run() { synchronized(lock) { System.out.println("Thread 1 starts."); try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Thread 1 ends."); } } }; Thread t2 = new Thread() { public void run() { synchronized(lock) { System.out.println("Thread 2 starts."); lock.notify(); System.out.println("Thread 2 ends."); } } }; t1.start(); t2.start(); } }
在這個(gè)示例中,線程t1會(huì)等待鎖,直到線程t2調(diào)用了lock.notify()方法,然后才會(huì)繼續(xù)執(zhí)行后面的代碼。