在Java中如何实现生产者-消费者模型以保证线程安全的进行消息传递?请结合wait()和notifyAll()方法给出示例代码。
时间: 2024-11-14 22:26:22 浏览: 7
生产者-消费者模型是并发编程中的一个核心概念,它解决了线程间通信和资源共享的问题。在Java中,我们可以通过wait()和notifyAll()方法来实现这一模型,确保线程间的协作和消息传递的安全性。以下是具体的实现方法和示例代码:
参考资源链接:[Java实现多线程生产者-消费者模型](https://wenku.csdn.net/doc/6wz2i2ufqm?spm=1055.2569.3001.10343)
首先,定义消息类Message,它将作为生产者和消费者之间传递的数据对象:
```java
class Message {
private String content;
private boolean available = false;
public synchronized String getContent() {
while (!available) {
try {
wait(); // 如果没有消息,消费者线程将等待
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
available = false; // 标记消息已被消费
notifyAll(); // 消息消费完毕,唤醒等待的线程
return content;
}
public synchronized void setContent(String message) {
while (available) {
try {
wait(); // 如果消息尚未被消费,则生产者线程等待
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
this.content = message;
available = true; // 标记消息已准备好被消费
notifyAll(); // 生产了新消息,唤醒等待的线程
}
}
```
然后,创建生产者和消费者类,它们都是Thread的子类:
```java
class Producer extends Thread {
private Message message;
public Producer(Message message) {
this.message = message;
}
public void run() {
while (true) {
// 生产消息
message.setContent(
参考资源链接:[Java实现多线程生产者-消费者模型](https://wenku.csdn.net/doc/6wz2i2ufqm?spm=1055.2569.3001.10343)
阅读全文