参照网络上的资料,自己写了一个生产者消费者模式。
package com.cd.test;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
class Main {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
Container container = new Container();
Producer a = new Producer(container, "Wang Sir");
Producer b = new Producer(container, "Li Sir");
Consumer c = new Consumer(container, "Chen");
Consumer d = new Consumer(container, "Opp");
Consumer e = new Consumer(container, "Satoshi");
service.submit(a);
service.submit(b);
service.submit(c);
service.submit(d);
service.submit(e);
}
}
class Goods {
int no;
String producer;
Goods(int no, String producer){
this.no = no;
this.producer = producer;
}
public String toString(){
return "product :" + no + " by " + this.producer;
}
}
class Container {
BlockingQueue<Goods> queue = null;
int index = 0;
int max = 0;
Container(int num){
if(num > 0){
queue = new ArrayBlockingQueue<Goods>(num);
max = num;
}
else{
queue = new ArrayBlockingQueue<Goods>(10);
max = 10;
}
}
Container(){
this(10);
}
synchronized public Goods pop() throws InterruptedException{
if(queue == null || queue.isEmpty())
return null;
Goods tmp = queue.take();
return tmp;
}
synchronized public boolean push(Goods good) throws InterruptedException{
if(queue == null || queue.size() == max)
return false;
queue.put(good);
return true;
}
}
class Producer implements Runnable{
Container container = null;
String producer = null;
Producer(Container ct, String producer){
this.container = ct;
this.producer = producer;
}
@Override
public void run() {
// TODO Auto-generated method stub
int index = 0;
while(index < 5){
Goods good = new Goods(index++, this.producer);
try {
container.push(good);
System.out.println(" Produced goods :" + good.toString());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable{
Container container = null;
String producer = null;
Consumer(Container ct, String producer){
this.container = ct;
this.producer = producer;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
Goods good;
try {
good = container.pop();
System.out.println(" Consumed goods :" + good.toString());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
其中一次的运行结果
Produced goods :product :0 by Wang Sir
Produced goods :product :1 by Wang Sir
Produced goods :product :2 by Wang Sir
Produced goods :product :3 by Wang Sir
Produced goods :product :4 by Wang Sir
Produced goods :product :0 by Li Sir
Produced goods :product :1 by Li Sir
Consumed goods :product :0 by Wang Sir
Consumed goods :product :0 by Li Sir
Consumed goods :product :1 by Wang Sir
Consumed goods :product :2 by Wang Sir
Consumed goods :product :3 by Wang Sir
Consumed goods :product :4 by Wang Sir
Produced goods :product :2 by Li Sir
Consumed goods :product :1 by Li Sir
Consumed goods :product :2 by Li Sir
Produced goods :product :3 by Li Sir
Consumed goods :product :3 by Li Sir
Produced goods :product :4 by Li Sir
Consumed goods :product :4 by Li Sir