欢迎来到天天文库
浏览记录
ID:61487905
大小:10.03 KB
页数:6页
时间:2021-02-05
《java多线程之消费者生产者模式.docx》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、java多线程之消费者生产者模式/*@authorshijin*生产者与消费者模型中,要保证以下几点:*1同一时间内只能有一个生产者生产 生产方法加锁sychronized*2同一时间内只能有一个消费者消费 消费方法加锁sychronized*3生产者生产的同时消费者不能消费 生产方法加锁sychronized*4消费者消费的同时生产者不能生产 消费方法加锁sychronized*5共享空间空时消费者不能继续消费 消费前循环判断是否为空,空的话将该线程wait,释放锁允许其他同步方法执行*6共享空间
2、满时生产者不能继续生产 生产前循环判断是否为满,满的话将该线程wait,释放锁允许其他同步方法执行 */ //主类 class ProducerConsumer { publicstaticvoidmain(String[]args) { StackBaskets=newStackBasket(); Producerp=newProducer(s); Consumerc=newConsumer(s); Threadtp=newThread(p);
3、 Threadtc=newThread(c); tp.start(); tc.start(); } } // classMantou { privateintid; Mantou(intid){ this.id=id; } publicStringtoString(){ return"Mantou:"+id; } } //共享栈空间 classStackBasket { Mantousm[]=newMan
4、tou[6]; intindex=0; /** *show生产方法. *show该方法为同步方法,持有方法锁; *show首先循环判断满否,满的话使该线程等待,释放同步方法锁,允许消费; *show当不满时首先唤醒正在等待的消费方法,但是也只能让其进入就绪状态, *show等生产结束释放同步方法锁后消费才能持有该锁进行消费 *@paramm元素 *@return没有返回值 */ publicsynchronizedvoidpush(Mantoum){
5、 try{ while(index==sm.length){ System.out.println("!!!!!!!!!生产满了!!!!!!!!!"); this.wait(); } this.notify(); }catch(InterruptedExceptione){ e.printStackTrace(); }catch(IllegalMonit
6、orStateExceptione){ e.printStackTrace(); } sm[index]=m; index++; System.out.println("生产了:"+m+"共"+index+"个馒头"); } /** *show消费方法 *show该方法为同步方法,持有方法锁 *show首先循环判断空否,空的话使该线程等待,释放同步方法锁,允许生产; *show当不空时首先唤醒正在等待的
7、生产方法,但是也只能让其进入就绪状态 *show等消费结束释放同步方法锁后生产才能持有该锁进行生产 *@parambtrue表示显示,false表示隐藏 *@return没有返回值 */ publicsynchronizedMantoupop(){ try{ while(index==0){ System.out.println("!!!!!!!!!消费光了!!!!!!!!!"); this.wait();
8、 } this.notify(); }catch(InterruptedExceptione){ e.printStackTrace(); }catch(Illegal
此文档下载收益归作者所有