首页 > 编程 > Java > 正文

Java基础-Queue队列

2019-11-06 06:13:56
字体:
来源:转载
供稿:网友

1.效果:

2.代码:

public class QueueStudy {    public static void main(String[] args) {        Queue q=new Queue();        PRoducter p=new Producter(q);        Customer c=new Customer(q);        p.start();        c.start();    }}//生产者class Producter extends Thread{    Queue q;    Producter(Queue q){        this.q=q;    }        public void run(){        for(int i=1;i<6;i++)        {            q.put(i);//推送数据        }    }}//消费者class Customer extends Thread{    Queue q;    Customer(Queue q){        this.q=q;    }        public void run(){        while(true){//循环获取数据            q.get();        }    }}//队列通知与接收数据class Queue{    int count=0;    boolean isEmpty=true;    //生产者生产数据    public synchronized void put(int i){        if(!isEmpty){//如果生产者生产的数据不为空,则一直等待,直到数据为空            try{                System.out.println("Product wait ...");                wait();            }            catch(Exception e){                e.printStackTrace();            }        }        count+=i;        isEmpty=false;        System.out.println("producter totoal product:"+i);        notify();//通知消费者数据已生产,请消费数据    }    //消费者消费数据    public synchronized void get(){        if(isEmpty){//如果数据为空,消费者等待生产者生产数据,直到有数据为止            try{                System.out.println("Customer wait ...");                System.out.println("");                wait();            }            catch(Exception e){                e.printStackTrace();            }        }        count--;        if(count==0){            isEmpty=true;            notify();//通知生产者数据已空,请生产者生产数据        }        System.out.println("Customer spend :"+count);    }}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表