package test.thread;
import java.util.LinkedList;
public class ProducerConsumerTest {
public static void main(String[] args) {
ClsQueue queue=new ClsQueue();
Producer p=new Producer(queue);
Consumer c=new Consumer(queue);
p.start();
c.start();
}
}
class Goods{
private String name;
private String price;
public Goods(String name,String price){
this.name=name;
this.price=price;
}
public String toString(){
return "名称:"+name+"价格:"+price;
}
}
class ClsQueue{
private LinkedList ll;
public ClsQueue(){
this.ll=new LinkedList();
}
public synchronized Object get(){
if(ll.size()<=0){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Object o=ll.removeFirst();
return o;
}
public synchronized void put(Object o){
int size=ll.size();
ll.addLast(o);
if(size==0){
this.notify();
}
}
}
class Producer extends Thread{
private ClsQueue queue;
public Producer(ClsQueue queue){
this.queue=queue;
}
public void run(){
int i=0;
while(true){
Goods goods=new Goods("货物"+i,"单价"+i);
queue.put(goods);
System.out.println("生产: "+goods.toString());
i++;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer extends Thread{
private ClsQueue queue;
public Consumer(ClsQueue queue){
this.queue=queue;
}
public void run(){
while(true){
System.out.println("消费: "+queue.get().toString());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
运行结果:
生产: 名称:货物0价格:单价0
消费: 名称:货物0价格:单价0
生产: 名称:货物1价格:单价1
生产: 名称:货物2价格:单价2
消费: 名称:货物1价格:单价1
生产: 名称:货物3价格:单价3
生产: 名称:货物4价格:单价4
消费: 名称:货物2价格:单价2
生产: 名称:货物5价格:单价5
生产: 名称:货物6价格:单价6
消费: 名称:货物3价格:单价3
生产: 名称:货物7价格:单价7
生产: 名称:货物8价格:单价8
消费: 名称:货物4价格:单价4
生产: 名称:货物9价格:单价9
生产: 名称:货物10价格:单价10
消费: 名称:货物5价格:单价5
生产: 名称:货物11价格:单价11
生产: 名称:货物12价格:单价12
消费: 名称:货物6价格:单价6
生产: 名称:货物13价格:单价13
生产: 名称:货物14价格:单价14
消费: 名称:货物7价格:单价7
生产: 名称:货物15价格:单价15
生产: 名称:货物16价格:单价16
消费: 名称:货物8价格:单价8
生产: 名称:货物17价格:单价17
生产: 名称:货物18价格:单价18
消费: 名称:货物9价格:单价9
生产: 名称:货物19价格:单价19
。。。。。。