Producer类:
public class Producer implements Runnable { private final BlockingQueue<Object> queue; int index = 0; public Producer(BlockingQueue<Object> q) { queue = q; } @Override public void run() { // TODO Auto-generated method stub try { while (true) { System.out.println("生产资源:"+index); queue.put(produce()); } } catch (InterruptedException ex) { } } public Object produce(){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } return "资源"+index++; }
public class Consumer implements Runnable { private final BlockingQueue<Object> queue; public Consumer(BlockingQueue<Object> q) { queue = q; } @Override public void run() { // TODO Auto-generated method stub try { while (true) { consume(queue.take());//blocking method } } catch (InterruptedException ex) { } } public void consume(Object x) { System.out.println("消耗资源:"+x); } }主类:
public class ConsumerProducerModel { public static void main(String[] args){ BlockingQueue<Object> q = new ArrayBlockingQueue<Object>(10); Producer p = new Producer(q); Consumer c1 = new Consumer(q); Consumer c2 = new Consumer(q); new Thread(p).start(); new Thread(c1).start(); new Thread(c2).start(); } }
原文:http://blog.csdn.net/jordandandan/article/details/44540559