多个生产者消费者java
时间: 2024-10-25 22:08:27 浏览: 8
Java多线程 生产者消费者模型实例详解
"多个生产者消费者" (Multiple Producer Multiple Consumer, MPMC) 模型是一种经典的设计模式,常见于Java并发编程中,特别是在处理大量数据时,需要解决线程安全的问题。它涉及到多个线程同时访问共享资源,比如一个缓冲区、队列或数组。
在Java中,可以利用`BlockingQueue`类(如`ArrayBlockingQueue`、`LinkedBlockingQueue`等)来实现MPMC,因为`BlockingQueue`提供了线程安全的插入和删除操作,并支持阻塞等待。生产者线程向队列中添加元素,而消费者线程从队列中取出元素。通常会使用`synchronized`关键字或者`ReentrantLock`来控制对共享资源的访问,避免数据竞争。
这里是一个简单的示例:
```java
import java.util.concurrent.*;
public class MPMCExample {
private final BlockingQueue<String> queue = new ArrayBlockingQueue<>(10);
// 生产者线程
public void producer() {
for (int i = 0; i < 50; i++) {
String message = "Producer " + i;
try {
queue.put(message);
System.out.println("Produced: " + message);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
// 消费者线程
public void consumer() {
while (true) {
String message;
try {
message = queue.take();
System.out.println("Consumed: " + message);
} catch (InterruptedException e) {
if (Thread.interrupted()) break;
else throw new RuntimeException(e);
}
}
}
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(2);
executor.execute(new MPMCExample().new producer());
executor.execute(new MPMCExample().new consumer());
executor.shutdown();
}
}
```
阅读全文