欢迎来到天天文库
浏览记录
ID:10821550
大小:47.00 KB
页数:3页
时间:2018-07-08
《多线程中的生产者和消费者》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、多线程中的生产者和消费者一、文件结构二、各个类的作用、和源代码。Bread.java自定义一个面包类packagecom.shuiniuer.producerconsumer;publicclassBread{intid;publicBread(inti){this.id=i;}@OverridepublicStringtoString(){return"Bread[id="+id+"]";}}Basket.java定义一个篮子类,用于存放面包(Bread对象)packagecom.shuiniuer.
2、producerconsumer;publicclassBasket{intindex=0;Bread[]breadBasket=newBread[12];//定义一个数组存放面包publicsynchronizedvoidpush(Breadbread){while(this.index==breadBasket.length){//思考为什么不用iftry{this.wait();}catch(InterruptedExceptione){e.printStackTrace();}}this.not
3、ifyAll();//唤醒等待的线程breadBasket[this.index]=bread;this.index++;}publicsynchronizedBreadpop(){try{Thread.sleep(1000);}catch(InterruptedExceptione){e.printStackTrace();}while(this.index==0){//思考为什么不用iftry{this.wait();}catch(InterruptedExceptione){e.printStac
4、kTrace();}}this.notifyAll();//唤醒等待的线程this.index--;returnbreadBasket[this.index];}}Producer.java生产者packagecom.shuiniuer.producerconsumer;publicclassProducerimplementsRunnable{BasketbreadBasket=null;publicProducer(Basketbasket){this.breadBasket=basket;}@Ov
5、erridepublicvoidrun(){for(inti=0;i<20;i++){Breadbread=newBread(i);this.breadBasket.push(bread);System.out.println("生产者:"+Thread.currentThread().getName()+"生产"+bread);}}}Consumer.java消费者packagecom.shuiniuer.producerconsumer;publicclassConsumerimplementsRu
6、nnable{BasketbreadBasket=null;publicConsumer(Basketbasket){this.breadBasket=basket;}@Overridepublicvoidrun(){for(inti=0;i<20;i++){Breadbread=this.breadBasket.pop();System.out.println("消费者:"+Thread.currentThread().getName()+"消费"+bread);}}}Test.java测试类pack
7、agecom.shuiniuer.producerconsumer;publicclassTest{publicstaticvoidmain(String[]args){Basketbasket=newBasket();Consumerconsumer1=newConsumer(basket);Consumerconsumer2=newConsumer(basket);Producerproducer1=newProducer(basket);Producerproducer2=newProducer(
8、basket);Threadt3=newThread(producer1);Threadt4=newThread(producer2);Threadt1=newThread(consumer1);Threadt2=newThread(consumer2);t1.start();t2.start();t3.start();t4.start();}}
此文档下载收益归作者所有