国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java程序設計之消費者和生產者

2019-11-15 00:59:52
字體:
來源:轉載
供稿:網友
java程序設計之消費者和生產者

  新建一個Break類,表示食物數量。

public class Break {    public static final int MAX = 10;  //最多一次性煮十個面包    Stack<Integer> stack = new Stack<Integer>();    public static int food_count = 0; //統計食物的個數        //做面包    public synchronized void make_food(int number){        stack.push(number);        food_count++;    }        //吃食物    public synchronized int eat_food(){        food_count--;        return stack.pop();    }}

  在創建一個廚房類,為了制作食物或者是消耗食物,若食物沒有了,則消費者進入wait(),生產者開始制作食物,隨后喚醒等待的消費者。

public class Kitchen {    PRivate Break food ;    public static int people1_eatnumber = 0;//第一個人吃的面包數量    public static int people2_eatnumber = 0;//第二個人吃的面包數量    public static final int TOTOAL_NUM = 100;//總共做的面包數量    public static int icount = 1;//統計做過的面包數量        public Kitchen(Break food){        this.food = food;    }        //做面包的方法    public synchronized void make(){        if(food.food_count<10){//鍋是不是滿了            food.make_food(Kitchen.icount);            System.out.println("做完了第"+Kitchen.icount+"個食物。");            Kitchen.icount++;            notifyAll();//食物有了,找兩個人來吃面包        }else{            System.out.println("鍋已經裝滿,一次性裝十個,等待兩人吃食物。");            try {                wait();            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }//進入阻塞狀態,等待消費者喚醒        }    }        //吃面包的方法    public synchronized void eat(){        if(food.food_count>0){            int temp = food.eat_food();//吃掉面包的編號            System.out.println(Thread.currentThread().getName()+"吃掉了第"+temp+"個食物");            if(Thread.currentThread().getName().equals("一號")){                people1_eatnumber++;            }else{                people2_eatnumber++;            }            notifyAll();  //喚醒繼續做面包        }else{            System.out.println("食物吃完了,等待重新烹飪。");            try {                wait();            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }}

  下面進入消費者和生產者類的構造,傳遞給一個Kitchen對象,其中消費者調用Kitchen類中的吃方法。

public class consumer implements Runnable {    Kitchen kitchen;        public consumer(Kitchen kitchen){        this.kitchen = kitchen;    }    @Override    public void run() {        // TODO Auto-generated method stub        while(true){            if(kitchen.icount>100&&Break.food_count<=0){                break;            }            try{                kitchen.eat();                Thread.sleep(100);            }catch(Exception e){                e.printStackTrace();            }        }    }}

  然而生產者則是調用了Kitchen對象中的制作方法。

public class product implements Runnable {    private Kitchen kitchen;    public product(Kitchen kitchen){        this.kitchen = kitchen;    }    @Override    public void run() {        // TODO Auto-generated method stub        while(true){            //結束這個線程            if(Kitchen.icount > 100){                break;            }            try{                                kitchen.make();                Thread.sleep(100);                }catch(Exception e){                e.printStackTrace();            }        }        System.out.println("廚房食物材料已經做完。");    }}

  下面開始寫主類,包括了main方法,啟動程序,創建一個test類,實現:

public class test {    public static void main(String[] args){        Break brake = new Break();        Kitchen kitchen = new Kitchen(brake);        product p = new product(kitchen);        consumer c1 = new consumer(kitchen);        consumer c2 = new consumer(kitchen);                Thread food = new Thread(p,"食物");        Thread people1 = new Thread(c1,"一號");        Thread people2 = new Thread(c2,"二號");                food.start();        people1.start();        people2.start();                try{            food.join();            people1.join();            people2.join();        }catch(Exception e){            e.printStackTrace();        }                System.out.println("一號吃了"+Kitchen.people1_eatnumber);        System.out.println("二號吃了"+Kitchen.people2_eatnumber);    }}

輸出結果如下:

做完了第1個食物。二號吃掉了第1個食物食物吃完了,等待重新烹飪。食物吃完了,等待重新烹飪。做完了第2個食物。一號吃掉了第2個食物食物吃完了,等待重新烹飪。做完了第3個食物。一號吃掉了第3個食物食物吃完了,等待重新烹飪。做完了第4個食物。一號吃掉了第4個食物做完了第5個食物。二號吃掉了第5個食物食物吃完了,等待重新烹飪。做完了第6個食物。二號吃掉了第6個食物食物吃完了,等待重新烹飪。做完了第7個食物。二號吃掉了第7個食物做完了第8個食物。一號吃掉了第8個食物食物吃完了,等待重新烹飪。食物吃完了,等待重新烹飪。做完了第9個食物。一號吃掉了第9個食物食物吃完了,等待重新烹飪。做完了第10個食物。一號吃掉了第10個食物做完了第11個食物。二號吃掉了第11個食物食物吃完了,等待重新烹飪。做完了第12個食物。二號吃掉了第12個食物食物吃完了,等待重新烹飪。食物吃完了,等待重新烹飪。做完了第13個食物。一號吃掉了第13個食物做完了第14個食物。二號吃掉了第14個食物食物吃完了,等待重新烹飪。食物吃完了,等待重新烹飪。做完了第15個食物。一號吃掉了第15個食物做完了第16個食物。二號吃掉了第16個食物食物吃完了,等待重新烹飪。做完了第17個食物。二號吃掉了第17個食物食物吃完了,等待重新烹飪。做完了第18個食物。二號吃掉了第18個食物食物吃完了,等待重新烹飪。做完了第19個食物。二號吃掉了第19個食物食物吃完了,等待重新烹飪。做完了第20個食物。二號吃掉了第20個食物食物吃完了,等待重新烹飪。做完了第21個食物。二號吃掉了第21個食物食物吃完了,等待重新烹飪。做完了第22個食物。二號吃掉了第22個食物食物吃完了,等待重新烹飪。做完了第23個食物。二號吃掉了第23個食物食物吃完了,等待重新烹飪。做完了第24個食物。二號吃掉了第24個食物食物吃完了,等待重新烹飪。做完了第25個食物。二號吃掉了第25個食物食物吃完了,等待重新烹飪。做完了第26個食物。二號吃掉了第26個食物食物吃完了,等待重新烹飪。食物吃完了,等待重新烹飪。做完了第27個食物。一號吃掉了第27個食物食物吃完了,等待重新烹飪。做完了第28個食物。一號吃掉了第28個食物食物吃完了,等待重新烹飪。做完了第29個食物。一號吃掉了第29個食物做完了第30個食物。二號吃掉了第30個食物食物吃完了,等待重新烹飪。做完了第31個食物。二號吃掉了第31個食物食物吃完了,等待重新烹飪。食物吃完了,等待重新烹飪。做完了第32個食物。一號吃掉了第32個食物食物吃完了,等待重新烹飪。做完了第33個食物。一號吃掉了第33個食物食物吃完了,等待重新烹飪。做完了第34個食物。一號吃掉了第34個食物做完了第35個食物。二號吃掉了第35個食物食物吃完了,等待重新烹飪。做完了第36個食物。二號吃掉了第36個食物食物吃完了,等待重新烹飪。食物吃完了,等待重新烹飪。做完了第37個食物。一號吃掉了第37個食物食物吃完了,等待重新烹飪。做完了第38個食物。一號吃掉了第38個食物食物吃完了,等待重新烹飪。做完了第39個食物。一號吃掉了第39個食物做完了第40個食物。二號吃掉了第40個食物食物吃完了,等待重新烹飪。食物吃完了,等待重新烹飪。做完了第41個食物。一號吃掉了第41個食物做完了第42個食物。二號吃掉了第42個食物做完了第43個食物。二號吃掉了第43個食物食物吃完了,等待重新烹飪。食物吃完了,等待重新烹飪。做完了第44個食物。一號吃掉了第44個食物食物吃完了,等待重新烹飪。做完了第45個食物。一號吃掉了第45個食物做完了第46個食物。二號吃掉了第46個食物食物吃完了,等待重新烹飪。做完了第47個食物。二號吃掉了第47個食物食物吃完了,等待重新烹飪。做完了第48個食物。二號吃掉了第48個食物食物吃完了,等待重新烹飪。做完了第49個食物。二號吃掉了第49個食物食物吃完了,等待重新烹飪。做完了第50個食物。二號吃掉了第50個食物食物吃完了,等待重新烹飪。食物吃完了,等待重新烹飪。做完了第51個食物。一號吃掉了第51個食物食物吃完了,等待重新烹飪。做完了第52個食物。一號吃掉了第52個食物做完了第53個食物。二號吃掉了第53個食物做完了第54個食物。一號吃掉了第54個食物食物吃完了,等待重新烹飪。食物吃完了,等待重新烹飪。做完了第55個食物。做完了第56個食物。二號吃掉了第56個食物一號吃掉了第55個食物做完了第57個食物。一號吃掉了第57個食物食物吃完了,等待重新烹飪。做完了第58個食物。一號吃掉了第58個食物做完了第59個食物。二號吃掉了第59個食物食物吃完了,等待重新烹飪。食物吃完了,等待重新烹飪。做完了第60個食物。一號吃掉了第60個食物做完了第61個食物。二號吃掉了第61個食物食物吃完了,等待重新烹飪。做完了第62個食物。二號吃掉了第62個食物食物吃完了,等待重新烹飪。做完了第63個食物。二號吃掉了第63個食物食物吃完了,等待重新烹飪。做完了第64個食物。二號吃掉了第64個食物食物吃完了,等待重新烹飪。做完了第65個食物。二號吃掉了第65個食物食物吃完了,等待重新烹飪。食物吃完了,等待重新烹飪。做完了第66個食物。做完了第67個食物。二號吃掉了第67個食物一號吃掉了第66個食物做完了第68個食物。一號吃掉了第68個食物食物吃完了,等待重新烹飪。做完了第69個食物。一號吃掉了第69個食物食物吃完了,等待重新烹飪。做完了第70個食物。一號吃掉了第70個食物做完了第71個食物。二號吃掉了第71個食物食物吃完了,等待重新烹飪。做完了第72個食物。二號吃掉了第72個食物食物吃完了,等待重新烹飪。做完了第73個食物。二號吃掉了第73個食物食物吃完了,等待重新烹飪。食物吃完了,等待重新烹飪。做完了第74個食物。一號吃掉了第74個食物食物吃完了,等待重新烹飪。做完了第75個食物。一號吃掉了第75個食物做完了第76個食物。二號吃掉了第76個食物食物吃完了,等待重新烹飪。做完了第77個食物。二號吃掉了第77個食物食物吃完了,等待重新烹飪。做完了第78個食物。二號吃掉了第78個食物食物吃完了,等待重新烹飪。做完了第79個食物。二號吃掉了第79個食物食物吃完了,等待重新烹飪。做完了第80個食物。二號吃掉了第80個食物食物吃完了,等待重新烹飪。做完了第81個食物。二號吃掉了第81個食物食物吃完了,等待重新烹飪。做完了第82個食物。二號吃掉了第82個食物食物吃完了,等待重新烹飪。做完了第83個食物。二號吃掉了第83個食物食物吃完了,等待重新烹飪。做完了第84個食物。二號吃掉了第84個食物食物吃完了,等待重新烹飪。做完了第85個食物。二號吃掉了第85個食物食物吃完了,等待重新烹飪。做完了第86個食物。二號吃掉了第86個食物食物吃完了,等待重新烹飪。做完了第87個食物。二號吃掉了第87個食物食物吃完了,等待重新烹飪。做完了第88個食物。二號吃掉了第88個食物做完了第89個食物。二號吃掉了第89個食物食物吃完了,等待重新烹飪。做完了第90個食物。二號吃掉了第90個食物食物吃完了,等待重新烹飪。做完了第91個食物。二號吃掉了第91個食物食物吃完了,等待重新烹飪。做完了第92個食物。二號吃掉了第92個食物食物吃完了,等待重新烹飪。做完了第93個食物。二號吃掉了第93個食物食物吃完了,等待重新烹飪。做完了第94個食物。二號吃掉了第94個食物食物吃完了,等待重新烹飪。做完了第95個食物。二號吃掉了第95個食物食物吃完了,等待重新烹飪。做完了第96個食物。二號吃掉了第96個食物食物吃完了,等待重新烹飪。做完了第97個食物。二號吃掉了第97個食物食物吃完了,等待重新烹飪。做完了第98個食物。二號吃掉了第98個食物食物吃完了,等待重新烹飪。做完了第99個食物。二號吃掉了第99個食物食物吃完了,等待重新烹飪。做完了第100個食物。二號吃掉了第100個食物廚房食物材料已經做完。一號吃了33二號吃了67


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 怀柔区| 鄂州市| 济宁市| 高邮市| 红安县| 曲阳县| 吉安市| 涡阳县| 吴桥县| 三河市| 大理市| 宕昌县| 新晃| 岑溪市| 汝南县| 崇义县| 灵寿县| 沙雅县| 三亚市| 洪洞县| 石泉县| 二连浩特市| 武宣县| 印江| 红安县| 民县| 福建省| 南华县| 岳西县| 丹东市| 尼木县| 尖扎县| 建水县| 汉川市| 屏东市| 高唐县| 福州市| 新郑市| 霍邱县| 沧源| 从江县|