Java中的wait和notify方法可以說(shuō)是Java中非常重要的兩個(gè)方法,在多線程編程中常常使用到。那么這兩個(gè)方法到底是什么呢?
wait方法和notify方法是Object類中的兩個(gè)方法,它們被用于在多線程程序中協(xié)調(diào)線程之間的通信。wait方法的作用是使線程進(jìn)入等待狀態(tài),等待其他線程調(diào)用notify方法喚醒它,而notify方法的作用則是喚醒在wait狀態(tài)下的一個(gè)線程。
//示例代碼
public class WaitNotifyDemo {
public static void main(String[] args) {
Object lock = new Object(); //定義一個(gè)鎖對(duì)象
new Thread(() -> {
synchronized (lock) {
try {
System.out.println("線程A開(kāi)始等待");
lock.wait();
System.out.println("線程A被喚醒");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "A").start();
new Thread(() -> {
synchronized (lock) {
System.out.println("線程B開(kāi)始通知");
lock.notify();
}
}, "B").start();
}
}
這段代碼展示了wait和notify方法的基本用法。當(dāng)線程A執(zhí)行到lock.wait()方法時(shí),它就會(huì)進(jìn)入等待狀態(tài),等待其他線程調(diào)用lock.notify()方法喚醒它。而當(dāng)線程B執(zhí)行到lock.notify()方法時(shí),它會(huì)喚醒在等待狀態(tài)下的一個(gè)線程。
需要注意的是,被喚醒的線程不是立即執(zhí)行,而是在獲取到鎖之后才會(huì)執(zhí)行。在默認(rèn)情況下,notify方法可以任意喚醒一個(gè)在等待隊(duì)列中的線程,而wait方法則會(huì)釋放鎖,讓其他線程有機(jī)會(huì)競(jìng)爭(zhēng)。