生产者消费者模式见上图所示。
blog宗旨:用图说话。
代码示例:
package com.huan; public class ProduceConsumer { public static void main(String[] args) { Middleware middleware = new Middleware(); new Thread(new Producer(middleware)).start(); new Thread(new Consumer(middleware)).start(); } } class Producer implements Runnable{ private Middleware middleware; public Producer(Middleware middleware){ this.middleware = middleware; } public void produce() throws Exception{ while(true){ middleware.put(); } } @Override public void run() { try { produce(); } catch (Exception e) { e.printStackTrace(); } } } class Consumer implements Runnable{ private Middleware middleware; public Consumer(Middleware middleware){ this.middleware = middleware; } public void consume() throws Exception{ while(true){ middleware.get(); } } @Override public void run() { try { consume(); } catch (Exception e) { e.printStackTrace(); } } } class Middleware{ private static final int MAX_SIZE = 10; private int[] storage = new int[MAX_SIZE]; private int index = 0; public synchronized void put() throws Exception{ if(index == MAX_SIZE){ wait(); } storage[index] = index; System.out.println("生产了:" + index); index++; notify(); } public synchronized void get() throws Exception{ if(index == 0){ wait(); } index--; System.out.println("消费了:" + storage[index]); notify(); } }
代码缺陷:当多个消费者时,或者多个生产者时,上例代码需要完善。
原文地址:http://blog.csdn.net/zxy861114/article/details/40742305