生产者消费者模型
layout: post title: “2020-03-06-生产者消费者模型.markdown” date: 2020-03-06 12:11:30 +0800
- BlockingQueue 是实现典型生产者消费者模型的接口 在生产者和消费者 不能工作时产生阻塞。
-
生产者消费者模型的经典代码(take get) ``` public class Supplier extends Thread { BlockingQueue
queue; public static AtomicInteger i = new AtomicInteger(0); String tag; public Supplier(BlockingQueue
queue, String tag) { this.queue = queue; this.tag = tag; } @Override public void run() { while (true) { int value = i.addAndGet(1); try { queue.put(tag + “_” + value); } catch (InterruptedException e) { e.printStackTrace(); } try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } }
} }
public class Consumer extends Thread {
BlockingQueue
public Consumer(BlockingQueue<String> queue, String tag) {
this.queue = queue;
this.tag = tag;
}
@Override
public void run() {
while (true) {
try {
System.out.println(tag + " : " + queue.take());
} catch (InterruptedException e) {
System.out.println("e:" + e.getMessage());
e.printStackTrace();
}
}
} }
public static void main(String[] args) {
LinkedBlockingQueue
```
- 几种实现类和原理 LinkedBlockingQueue,ArrayBlockingQueue,SynchronousQueue,PriorityBlockingQueue,DelayQueue ArrayBlockingQueue 是固定大小的Queue,取数据会根据当前头所在index LinkedBlockingQueue 不限定大小 底层都是ReentrantLock