在 Java 中,wait() 和 notify() 是用于线程间通信的重要方法。它们属于 Object 类,而不是 Thread 类,因为它们操作的是共享对象的监视器(monitor)。以下是它们的用法以及需要注意的事项。
基本概念
wait() 方法:
让当前线程进入等待状态,并释放它持有的对象锁。
必须在同步代码块或同步方法中调用,否则会抛出 IllegalMonitorStateException。
等待线程可以被其他线程通过 notify() 或 notifyAll() 唤醒。
notify() 方法:
唤醒一个正在等待该对象锁的线程。
如果有多个线程等待,具体唤醒哪一个线程由 JVM 决定。
notifyAll() 方法:
唤醒所有等待该对象锁的线程。
示例代码
生产者-消费者问题
下面是使用 wait() 和 notify() 实现的生产者-消费者模型。
class SharedResource {
private int data;
private boolean isProduced = false;
// 生产数据
public synchronized void produce(int value) throws InterruptedException {
while (isProduced) {
wait(); // 等待消费完毕
}
data = value;
System.out.println("Produced: " + value);
isProduced = true;
notify(); // 通知消费者
}
// 消费数据
public synchronized int consume() throws InterruptedException {
while (!isProduced) {
wait(); // 等待生产
}
System.out.println("Consumed: " + data);
isProduced = false;
notify(); // 通知生产者
return data;
}
}
public class ProducerConsumerDemo {
public static void main(String[] args) {
SharedResource resource = new SharedResource();
// 生产者线程
Thread producer = new Thread(() -> {
try {
for (int i = 0; i < 5; i++) {
resource.produce(i);
Thread.sleep(100); // 模拟生产延迟
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
// 消费者线程
Thread consumer = new Thread(() -> {
try {
for (int i = 0; i < 5; i++) {
resource.consume();
Thread.sleep(200); // 模拟消费延迟
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
producer.start();
consumer.start();
}
}
运行步骤
启动线程:生产者和消费者线程交替运行。
线程通信:生产者调用 wait() 等待消费者消费完毕;消费者调用 wait() 等待生产者生产数据。
锁和同步:synchronized 关键字确保了线程安全。
注意事项
wait() 和 notify() 必须在同步块中使用:
synchronized (obj) {
obj.wait();
}
否则会抛出 IllegalMonitorStateException。
释放锁:
调用 wait() 后,线程会释放锁,进入等待队列。
被 notify() 唤醒后,线程会尝试重新获取锁并继续执行。
死锁风险:
小心使用 wait() 和 notify(),避免逻辑错误导致死锁。
用 notifyAll() 替代 notify()(视情况而定):
如果多个线程在等待相同的对象,使用 notify() 可能会导致某些线程永远得不到唤醒。
notifyAll() 更加安全,但可能降低效率。
推荐替代方案
对于现代 Java 开发,可以使用更高级的并发工具,比如:
BlockingQueue:用于生产者-消费者模型。
Condition:提供类似 wait() 和 notify() 的功能,但更灵活。
CountDownLatch 和 Semaphore:适用于更复杂的线程间协调需求。
wait() 和 notify() 更接近底层,在简单场景中足够,但高并发场景下推荐使用 java.util.concurrent 提供的工具。
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E7%A7%81%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E7%A7%81%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E7%A7%81%E7%B6%B2%E6%93%8D%E6%8E%A7VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%81%87%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%81%87%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%81%87%E7%B6%B2%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%8C%85%E6%AE%BA%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%8C%85%E6%AE%BA%E8%B2%B7%E5%88%86VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E5%8C%85%E6%AE%BA%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A1%E6%AF%941VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A1%E6%AF%941%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A1%E6%AF%941%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E6%AD%90%E5%8D%9A%E4%B8%80%E6%AF%94%E4%B8%80%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E7%A7%81%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E7%A7%81%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E7%A7%81%E7%B6%B2%E6%93%8D%E6%8E%A7VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%81%87%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%81%87%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%81%87%E7%B6%B2%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%8C%85%E6%AE%BA%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%8C%85%E6%AE%BA%E8%B2%B7%E5%88%86VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E5%8C%85%E6%AE%BA%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F1%E6%AF%941VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F1%E6%AF%941%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F1%E6%AF%941%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E4%BA%9E%E6%98%9F%E4%B8%80%E6%AF%94%E4%B8%80%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E7%A7%81%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E7%A7%81%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E7%A7%81%E7%B6%B2%E6%93%8D%E6%8E%A7VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%81%87%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%81%87%E7%B6%B2%E5%8C%85%E6%AE%BAVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%81%87%E7%B6%B2%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%8C%85%E6%AE%BA%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%8C%85%E6%AE%BA%E8%B2%B7%E5%88%86VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E5%8C%85%E6%AE%BA%E7%B6%B2%E5%90%88%E4%BD%9CVX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%833601%E6%AF%941VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E4%B8%80%E6%AF%94%E4%B8%80VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%833601%E6%AF%941%E7%A7%81%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%833601%E6%AF%941%E5%81%87%E7%B6%B2VX%3Aa9685288
https://www.douguo.com/caipu/%E7%92%B0%E7%90%83360%E4%B8%80%E6%AF%94%E4%B8%80%E5%90%88%E4%BD%9CVX%3Aa9685288
https://818ps.com/muban/oubosiwangVXa9685288_1.html
https://818ps.com/muban/oubosiwanghezuoVXa9685288_1.html
https://818ps.com/muban/oubosiwangbaoshaVXa9685288_1.html
https://818ps.com/muban/oubosiwangcaokongVXa9685288_1.html
https://818ps.com/muban/oubojiawangVXa9685288_1.html
https://818ps.com/muban/oubojiawanghezuoVXa9685288_1.html
https://818ps.com/muban/oubojiawangbaoshaVXa9685288_1.html
https://818ps.com/muban/oubojiawangyibiyiVXa9685288_1.html
https://818ps.com/muban/oubobaoshawangVXa9685288_1.html
https://818ps.com/muban/oubobaoshamaifenVXa9685288_1.html
https://818ps.com/muban/oubobaoshawanghezuoVXa9685288_1.html
https://818ps.com/muban/oubo1bi1VXa9685288_1.html
https://818ps.com/muban/ouboyibiyiVXa9685288_1.html
https://818ps.com/muban/oubo1bi1siwangVXa9685288_1.html
https://818ps.com/muban/oubo1bi1jiawangVXa9685288_1.html
https://818ps.com/muban/ouboyibiyihezuoVXa9685288_1.html
https://818ps.com/muban/yaxingsiwangVXa9685288_1.html
https://818ps.com/muban/yaxingsiwanghezuoVXa9685288_1.html
https://818ps.com/muban/yaxingsiwangbaoshaVXa9685288_1.html
https://818ps.com/muban/yaxingsiwangcaokongVXa9685288_1.html
https://818ps.com/muban/yaxingjiawangVXa9685288_1.html
https://818ps.com/muban/yaxingjiawanghezuoVXa9685288_1.html
https://818ps.com/muban/yaxingjiawangbaoshaVXa9685288_1.html
https://818ps.com/muban/yaxingjiawangyibiyiVXa9685288_1.html
https://818ps.com/muban/yaxingbaoshawangVXa9685288_1.html
https://818ps.com/muban/yaxingbaoshamaifenVXa9685288_1.html
https://818ps.com/muban/yaxingbaoshawanghezuoVXa9685288_1.html
https://818ps.com/muban/yaxing1bi1VXa9685288_1.html
https://818ps.com/muban/yaxingyibiyiVXa9685288_1.html
https://818ps.com/muban/yaxing1bi1siwangVXa9685288_1.html
https://818ps.com/muban/yaxing1bi1jiawangVXa9685288_1.html
https://818ps.com/muban/yaxingyibiyihezuoVXa9685288_1.html
https://818ps.com/muban/huanqiu360siwangVXa9685288_1.html
https://818ps.com/muban/huanqiu360siwanghezuoVXa9685288_1.html
https://818ps.com/muban/huanqiu360siwangbaoshaVXa9685288_1.html
https://818ps.com/muban/huanqiu360siwangcaokongVXa9685288_1.html
https://818ps.com/muban/huanqiu360jiawangVXa9685288_1.html
https://818ps.com/muban/huanqiu360jiawanghezuoVXa9685288_1.html
https://818ps.com/muban/huanqiu360jiawangbaoshaVXa9685288_1.html
https://818ps.com/muban/huanqiu360jiawangyibiyiVXa9685288_1.html
https://818ps.com/muban/huanqiu360baoshawangVXa9685288_1.html
https://818ps.com/muban/huanqiu360baoshamaifenVXa9685288_1.html
https://818ps.com/muban/huanqiu360baoshawanghezuoVXa9685288_1.html
https://818ps.com/muban/huanqiu3601bi1VXa9685288_1.html
https://818ps.com/muban/huanqiu360yibiyiVXa9685288_1.html
https://818ps.com/muban/huanqiu3601bi1siwangVXa9685288_1.html
https://818ps.com/muban/huanqiu3601bi1jiawangVXa9685288_1.html
https://818ps.com/muban/huanqiu360yibiyihezuoVXa9685288_1.html
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f71c97a53572b6/qs
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f77405a53572b6/qs
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f77405f166a9e4/qs
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f71c9703l63l33l3047fa37/qs
https://www.5118.com/keyword/110353l13l13l03l13l73l83l33l23l33l13l010315f7740503l63l33l3047fa37/qs
https://www.clzg.cn/user/795764.html
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040412/viewspace-3051216/ ,如需转载,请注明出处,否则将追究法律责任。