更新時間:2023-04-07 來源:黑馬程序員 瀏覽量:
IT就到黑馬程序員.gif)
Java中可以通過wait(), notify()和notifyAll()方法來實現(xiàn)多線程之間的通訊和協(xié)作。
wait()方法用于讓一個線程等待,直到另一個線程通知它繼續(xù)執(zhí)行。當一個線程調(diào)用wait()方法時,它會釋放當前的鎖,然后進入等待狀態(tài)。等待狀態(tài)中的線程可以通過notify()或notifyAll()方法來被喚醒。
notify()方法用于喚醒一個等待狀態(tài)的線程。如果有多個線程等待,只會喚醒其中的一個。如果要喚醒所有等待狀態(tài)的線程,可以使用notifyAll()方法。
下面是一個簡單的示例代碼,演示了如何使用wait()、notify()和notifyAll()方法來實現(xiàn)多個線程之間的通訊和協(xié)作。
public class ThreadCommunicationDemo {
private Object lock = new Object();
private boolean flag = false;
public static void main(String[] args) {
ThreadCommunicationDemo demo = new ThreadCommunicationDemo();
new Thread(demo::waitThread).start();
new Thread(demo::notifyThread).start();
new Thread(demo::notifyAllThread).start();
}
private void waitThread() {
synchronized (lock) {
while (!flag) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("waitThread is notified.");
}
}
private void notifyThread() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock) {
flag = true;
lock.notify();
System.out.println("notifyThread notifies one waiting thread.");
}
}
private void notifyAllThread() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock) {
flag = true;
lock.notifyAll();
System.out.println("notifyAllThread notifies all waiting threads.");
}
}
}在這個示例代碼中,創(chuàng)建了一個Object類型的鎖對象lock,以及一個boolean類型的flag變量。waitThread()方法會在lock對象上等待,直到flag變量為true時才會繼續(xù)執(zhí)行。notifyThread()方法會等待1秒鐘后將flag變量設(shè)置為true,并調(diào)用lock對象的notify()方法來喚醒等待在lock對象上的線程。notifyAllThread()方法會等待2秒鐘后將flag變量設(shè)置為true,并調(diào)用lock對象的notifyAll()方法來喚醒等待在lock對象上的所有線程。
運行這個示例代碼后,可以看到如下輸出:
notifyThread notifies one waiting thread. waitThread is notified. notifyAllThread notifies all waiting threads. waitThread is notified.
這個輸出表明,使用notify()方法可以喚醒等待狀態(tài)中的一個線程,而使用notifyAll()方法可以喚醒所有等待狀態(tài)的線程。
1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設(shè)計】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運營】深圳跨境電商運營畢業(yè)22個工作日,就業(yè)率91%+,最高薪資達13500元
2025-09-19【AI運維】鄭州運維1期就業(yè)班,畢業(yè)14個工作日,班級93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19