37256-软件开发与项目管理-模块案例生产者消费者问题_第1页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、模块八 综合项目实战案例生产者消费者问题一、案例描述生产者消费者问题是计算机科学中的经典问题,也是程序设计中经常遇到。该问题描述如下:生产者和消费者同时在运行,两者之间设置n 个缓冲区,生产者不断把消息保存到缓冲区中,消费者则从缓冲区中获取消息。生产者和消费者必须保持同步,不允许生产者向一个已装有消息且尚未取走消息的缓冲区中保存消息,也不允许消费者从一个空的缓冲区中获取消息。产者生产的所有消息,且不会重复接收同一个消息。才能确保消费者能够接收到生二、案例要求(1)(2)(3)编写生产者程序;编写消费者程序;生产者和消费者之间通过线程实现同步。三、案例实现生产者消费者问题首先必须让生产者和消费者

2、同时处于运行状态,即多任务同时执行。Java 允许多个线程同时处于运行状态,每个线程执行自己的任务。生产者和消费者执行不同的操作,因此需要为它们编写不同的程序。生产者 Producer.java 和消费者 Consumer.java 中通过方法调用实现了保存消息和获取消息,显然,生产者调用的 read( )和消费者调用的 write( )必须同步。否则,如果缓冲区满了,生产者还要发送消息,将造成消息的丢失;如果缓冲区已空,消费者还要获取消息,也会出错。public class Producer extends Threadpublic void run()for(i =1;i=10;i+)ra

3、ndom = ()(Math.random()*1000); /产生一个随机整数System.out.prln(生产者保存: + random);Buffer.write(random);/把随机数保存到缓冲区中Consumer 通过循环从缓冲区中获取随机数,每次循环通过方法调用获取,然后在控制台显示消费者获取该随机数提示信息。public class Consumer extends Threadpublic void run()for(i =1;i=10;i+)r = Buffer.read();/从缓冲区中获取随机数System.out.prln(t 消费者获取: + r);public

4、 class Buffers s s ssic private finalSIZE = 6;ic private ic private ic privateic privatebuffer = newhead = 0;SIZE;/head 指向最前面的消息tail = 0;/tail 指向最后面的消息isFull = false, isEmpty = true;public sic void write(while (isFull)tryn)/缓冲区满就一直睡眠Thread.sleep(long) Math.random() * 100);catch (erruptedException e)

5、buffertail = n;tail = (tail+1)%SIZE; if (isEmpty = false)isEmpty = true; if(tail=head)isFull = true;/保存消息/tail 指针后移/如果消费者在睡眠/如果缓冲区满public sicread()while (isEmpty)try/缓冲区空就一直睡眠Thread.sleep(long) Math.random() * 100);catch (erruptedException e)n = bufferhead; head = (head+1)%SIZE; if(isFull)isFull = false; if(head=tail)isEmpty = true;return n;/获取消息/head 指针后移/如果生产者在睡眠/如果缓冲区空生产者和消费者实现同步后就可以创建 Producer 和 Consumer 对象实现发送消息的任务了。public class ProducerAndConsumerpublic sic void m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论