生产者消费者模拟程序

来源:互联网 发布:苹果5可以用移动4g网络吗 编辑:程序博客网 时间:2024/05/23 02:07
//模拟生产者消费者,生产者(Producter类)生产窝头(WoTou类),放入一个大筐(stack类),消费者(Consumer类)从大筐中取出窝头并打印窝头的idpublic class producconsumertest {/** * @param args */public static void main(String[] args) {Stack ss = new Stack();Producter p = new Producter(ss);Consumer c = new Consumer(ss);new Thread(p).start();new Thread(c).start();}}//窝头类class WoTou{private int id;public int getId() {return id;}public void setId(int id) {this.id = id;}public WoTou(int id){this.id=id;}}//大筐类class Stack{private int index=0;private WoTou[] arr = new WoTou[6];public synchronized void push(WoTou wt){while(index == arr.length){try {this.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}this.notify();arr[index] = wt;index++;}public synchronized WoTou pop(){while(index ==0){try {this.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}this.notify();index--;return  arr[index];}}//生产者类class Producter implements Runnable{private Stack  ss =null;public Producter(Stack ss){this.ss = ss;}@Overridepublic void run() {for(int i =0;i<20;i++){WoTou wt = new WoTou(i);    ss.push(wt);System.out.println("生产了:"+i);}}}//消费者类class Consumer implements Runnable{private Stack  ss =null;public Consumer(Stack ss){this.ss = ss;}@Overridepublic void run() {for(int i =0;i<20;i++){WoTou wt =ss.pop();System.out.println("消费了:"+wt.getId());}}}