生产者消费者模式

来源:互联网 发布:sql if else语句 编辑:程序博客网 时间:2024/06/05 17:52
public class WoTou {    int id;    public WoTou(int id) {        this.id = id;    }    @Override    public String toString() {        return "wotou:"+id;    }}public class SyncStack {    int index = 0;    WoTou[] arrWT = new WoTou[6];    public synchronized  void push(WoTou wt){        while (index == arrWT.length){            try {                this.wait();            } catch (InterruptedException e) {                e.printStackTrace();            }        }        this.notify();        arrWT[index] = wt;        index++;    }    public synchronized  WoTou pop(){        while (index == 0){            try {                this.wait();            } catch (InterruptedException e) {                e.printStackTrace();            }        }        this.notify();        index--;        return arrWT[index];    }}public class Produce implements Runnable{    SyncStack ss = null;    public Produce(SyncStack ss) {        this.ss = ss;    }    @Override    public void run() {        for(int i = 0;i<20;i++){            WoTou wt = new WoTou(i);            ss.push(wt);            System.out.println("生产了:"+wt);            try {                Thread.sleep((int)Math.random()*200);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}public class Consumer implements Runnable{    SyncStack ss = null;    public Consumer(SyncStack ss) {        this.ss = ss;    }    @Override    public void run() {        for(int i = 0;i<20;i++){            WoTou wt = ss.pop();            System.out.println("消费了:"+wt);            try {                Thread.sleep((int)(Math.random()*1000));            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}public class ProduceConsumer {    public static void main(String[] args) {        // write your code here        SyncStack ss = new SyncStack();        Produce p = new Produce(ss);        Consumer c = new Consumer(ss);        new Thread(p).start();        new Thread(c).start();    }}

0 0
原创粉丝点击