wait()
方法是Java中的一個(gè)同步機(jī)制,用于讓當(dāng)前線(xiàn)程等待,直到其他線(xiàn)程調(diào)用同一個(gè)對(duì)象的notify()
或notifyAll()
方法。wait()
方法通常與synchronized
關(guān)鍵字和synchronized
塊一起使用,以確保線(xiàn)程安全。
以下是wait()
方法的基本用法:
synchronized
關(guān)鍵字修飾方法或代碼塊。wait()
方法讓當(dāng)前線(xiàn)程等待。調(diào)用wait()
方法時(shí),當(dāng)前線(xiàn)程會(huì)釋放對(duì)象的鎖,進(jìn)入等待狀態(tài)。notify()
或notifyAll()
方法時(shí),等待的線(xiàn)程會(huì)被喚醒。被喚醒的線(xiàn)程需要重新獲取對(duì)象的鎖,然后繼續(xù)執(zhí)行。下面是一個(gè)簡(jiǎn)單的示例:
public class WaitNotifyExample {
private static final Object lock = new Object();
private static boolean ready = false;
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
synchronized (lock) {
System.out.println("Thread 1: Waiting for the other thread to set the ready flag.");
try {
lock.wait(); // 當(dāng)前線(xiàn)程進(jìn)入等待狀態(tài)
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 1: The ready flag is set, and I can continue.");
}
});
Thread t2 = new Thread(() -> {
synchronized (lock) {
try {
Thread.sleep(2000); // 等待2秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 2: Setting the ready flag.");
ready = true;
lock.notify(); // 喚醒等待的線(xiàn)程
}
});
t1.start();
t2.start();
}
}
在這個(gè)示例中,我們有兩個(gè)線(xiàn)程t1
和t2
。t1
線(xiàn)程等待另一個(gè)線(xiàn)程t2
設(shè)置ready
標(biāo)志。t2
線(xiàn)程在等待2秒后設(shè)置ready
標(biāo)志,并通過(guò)調(diào)用lock.notify()
喚醒等待的線(xiàn)程。當(dāng)t1
線(xiàn)程被喚醒后,它會(huì)繼續(xù)執(zhí)行并打印出相應(yīng)的消息。