更新时间:2023-04-07 来源:黑马程序员 浏览量:

Java中可以通过wait(), notify()和notifyAll()方法来实现多线程之间的通讯和协作。
wait()方法用于让一个线程等待,直到另一个线程通知它继续执行。当一个线程调用wait()方法时,它会释放当前的锁,然后进入等待状态。等待状态中的线程可以通过notify()或notifyAll()方法来被唤醒。
notify()方法用于唤醒一个等待状态的线程。如果有多个线程等待,只会唤醒其中的一个。如果要唤醒所有等待状态的线程,可以使用notifyAll()方法。
下面是一个简单的示例代码,演示了如何使用wait()、notify()和notifyAll()方法来实现多个线程之间的通讯和协作。
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.");
}
}
}在这个示例代码中,创建了一个Object类型的锁对象lock,以及一个boolean类型的flag变量。waitThread()方法会在lock对象上等待,直到flag变量为true时才会继续执行。notifyThread()方法会等待1秒钟后将flag变量设置为true,并调用lock对象的notify()方法来唤醒等待在lock对象上的线程。notifyAllThread()方法会等待2秒钟后将flag变量设置为true,并调用lock对象的notifyAll()方法来唤醒等待在lock对象上的所有线程。
运行这个示例代码后,可以看到如下输出:
notifyThread notifies one waiting thread. waitThread is notified. notifyAllThread notifies all waiting threads. waitThread is notified.
这个输出表明,使用notify()方法可以唤醒等待状态中的一个线程,而使用notifyAll()方法可以唤醒所有等待状态的线程。
毕业16个工作日,平均薪资13180元,就业率100%,广州黑马AI智能应用开发(Java)学科20250529班
2026-03-06毕业32个工作日,平均薪资11147元,就业率95%,广州黑马AI智能应用开发(Java)学科20250326班
2026-03-05黑马程序员2025全国就业数据发布:全学科平均就业率92.07%,AI开发类就业平均薪资达11869.67元。
2026-03-05黑马全国校区齐开班!场面太太太壮观了!
2026-03-03AI智能应用开发课程紧贴企业刚需,全程高效学习,直达中高级软件开发水平
2026-02-28风口正劲!黑马程序员又一AI智能应用开发班毕业当天100%就业!
2026-02-27