生产者消费者模式
2018-10-08 19:02 东风恶 阅读(261) 评论(0) 编辑 收藏 举报生产者、消费者有很多的实现方法:
- 用wait() / notify()方法
- 用Lock的多Condition方法
- BlockingQueue阻塞队列方法
可以发现在上面实现阻塞队列题中,BlockingQueue的实现基本都用到了类似的实现,将BlockingQueue的实现方式稍微包装一下就成了一个生产者-消费者模式了。
-
//用阻塞队列快速实现生产者-消费者
-
public class ProduceAndConsumer {
-
public static void main(String[] args) {
-
final BlockingQueue<Integer> list = new ArrayBlockingQueue<Integer>(10);
-
Procude procude = new Procude(list);
-
Consumer consumer = new Consumer(list);
-
procude.start();
-
consumer.start();
-
}
-
static class Procude extends Thread{
-
private final BlockingQueue<Integer> list;
-
Procude(BlockingQueue<Integer> list) {
-
this.list = list;
-
}
-
@Override
-
public void run() {
-
while(true){
-
try {
-
Integer take = list.take();
-
System.out.println("消费数据:" + take);
-
// Thread.sleep(1000);
-
} catch (InterruptedException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
}
-
-
static class Consumer extends Thread{
-
private final BlockingQueue<Integer> list;
-
Consumer(BlockingQueue<Integer> list) {
-
this.list = list;
-
}
-
@Override public void run() {
-
while (true){
-
try {
-
int i = new Random().nextInt(100);
-
list.put(i);
-
System.out.println("生产数据:" + i);
-
Thread.sleep(1000);
-
} catch (InterruptedException e) {
-
e.printStackTrace();
-
}
此处不再详细地写另外几种实现方式了:wait() / notify()方法、Lock的多Condition方法、信号量等,甚至可以考虑用CyclicBarrier、CountDownLatch也可以实现生产者-消费者的,难易程度、效率不一样罢了。