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