生产者消费者模型---阻塞队列实现(BlockingQueue)
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class Solution {
public static void main(String[] args) {
BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(2);
Consumers c=new Consumers(queue);
Producers p=new Producers(queue);
p.start();
c.start();
}
// 消费者
public static class Consumers extends Thread {
BlockingQueue<Integer> queue;
public Consumers(BlockingQueue<Integer> queue) {
this.queue = queue;
}
@Override
public void run() {
// 执行消费方法
consumer();
}
private void consumer() {
while (true) {
try {// 拿出消费
int thing = queue.take();
System.out.println("消费者拿了一个" + thing + "号产品进行消费");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
// 生产者
public static class Producers extends Thread {
BlockingQueue<Integer> queue;
public Producers(BlockingQueue<Integer> queue) {
this.queue = queue;
}
@Override
public void run() {
// 执行生产方法
produce();
}
private void produce() {
int i = 0;
while (true) {
try {// 生产 添加队列
queue.put(i);
System.out.println("增加了一个" + i + "号产品");
i++;
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
运行结果:
增加了一个31409号产品
增加了一个31410号产品
消费者拿了一个31410号产品进行消费
消费者拿了一个31411号产品进行消费
增加了一个31411号产品
增加了一个31412号产品
消费者拿了一个31412号产品进行消费
消费者拿了一个31413号产品进行消费
增加了一个31413号产品
增加了一个31414号产品
增加了一个31415号产品
增加了一个31416号产品
消费者拿了一个31414号产品进行消费
消费者拿了一个31415号产品进行消费
消费者拿了一个31416号产品进行消费