讲稿JAVA中用户级线程示例.doc

讲稿JAVA中用户级线程示例.doc

ID:55752850

大小:43.00 KB

页数:4页

时间:2020-06-05

讲稿JAVA中用户级线程示例.doc_第1页
讲稿JAVA中用户级线程示例.doc_第2页
讲稿JAVA中用户级线程示例.doc_第3页
讲稿JAVA中用户级线程示例.doc_第4页
资源描述:

《讲稿JAVA中用户级线程示例.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.加入同步机制的生产者与消费者问题//生产者类classProducerextendsThread{privateShareshare;privateintnumber;publicProducer(Shares,intnumber){share=s;this.number=number;}publicvoidrun(){for(inti=0;i<10;i++){share.put(i);System.out.println("生产者"+this.number+"输出的数据为:"+i);try{slee

2、p((int)(Math.random()*100));}catch(InterruptedExceptione){}}}}//消费者类classConsumerextendsThread{privateShareshare;privateintnumber;publicConsumer(Shares,intnumber){share=s;this.number=number;}publicvoidrun(){intvalue=0;for(inti=0;i<10;i++){value=share.get(

3、);System.out.println("消费者"+this.number+"得到的数据为:"+value);}}}//加入同步机制的共享资源类classShare{privateintcontents;privatebooleanavailable=false;publicsynchronizedintget(){while(available==false){try{wait();}catch(InterruptedExceptione){}}available=false;notifyAll();

4、returncontents;}publicsynchronizedvoidput(intvalue){while(available==true){try{wait();}catch(InterruptedExceptione){}}contents=value;available=true;notifyAll();}}//主类classH1{publicstaticvoidmain(String[]args){Shares=newShare();Producerp=newProducer(s,1);C

5、onsumerc=newConsumer(s,1);p.start();c.start();}}输出:生产者1输出的数据为:0消费者1得到的数据为:0生产者1输出的数据为:1消费者1得到的数据为:1消费者1得到的数据为:2生产者1输出的数据为:2消费者1得到的数据为:3生产者1输出的数据为:3生产者1输出的数据为:4消费者1得到的数据为:4消费者1得到的数据为:5生产者1输出的数据为:5消费者1得到的数据为:6生产者1输出的数据为:6消费者1得到的数据为:7生产者1输出的数据为:7消费者1得到的数据为:8

6、生产者1输出的数据为:8消费者1得到的数据为:9生产者1输出的数据为:9·分析:1)未加入同步机制时Producer与Consumer的运行速度不同,不能保证Producer放一个数Consumer取一个数。可能有两种情况:(本例中生产者休眠若干秒,故生产者慢)①Producer比Consumer快,Producer放入的数据Consumer来不及取,可能丢失数据。②Consumer比Producer快,Consumer可能取出相同数据。本例中Consumer取出的全为0,既是这种情况。2)加入同步机制后

7、,保证了Producer放一个数Consumer取一个数。可能发生的情况有:①Producer先运行(即先调用put()),Producer与Consumer速度一致,保证了Producer放一个数Consumer取一个数。因为available初值为false,Producer调用put()时,越过while循环,把数据value放入contents中,然后置available=true。Consumer调用get()时,也越过while循环,取出数据,同时执行available=false。二者交替执

8、行,保证了Producer放一个数Consumer取一个数。②Producer比Consumer快当Producer执行put()把available置成true,而Consumer还没来得及执行available=false时,Producer再一次执行put(),进入while循环,在wait()处进入等待状态。当Consumer执行到notifyAll()时,Producer被唤醒。③Consumer比Producer快

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。