生产者消费者问题java

上传人:飞*** 文档编号:51731193 上传时间:2018-08-16 格式:PDF 页数:7 大小:332.22KB
返回 下载 相关 举报
生产者消费者问题java_第1页
第1页 / 共7页
生产者消费者问题java_第2页
第2页 / 共7页
生产者消费者问题java_第3页
第3页 / 共7页
生产者消费者问题java_第4页
第4页 / 共7页
生产者消费者问题java_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《生产者消费者问题java》由会员分享,可在线阅读,更多相关《生产者消费者问题java(7页珍藏版)》请在金锄头文库上搜索。

1、湖北中医学院信息技术系操作系统课程设计第 1 页一、题目:(标题 2,即三号黑体加粗)用多进程同步方法解决生产者- 消费者问题。二、设计目的:通过研究 Linux 的进程机制和信号量实现生产者消费者问题的并发控制。三、总体设计思想概述:1、 生产者消费者问题是一种同步问题的抽象描述。2、 计算机系统中的每个进程都可以消费或生产某类资源。当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。3、 而当某个进程释放资源时,则它就相当一个生产者。四、说明:有界缓冲区内设有20 个存储单元 , 放入 / 取出的数据项设定为1-20 这 20 个整型数。五、设计要求:1、每个生产者和消费者

2、对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/ 消费者进程的标识符。2、生产者和消费者各有两个以上。3、多个生产者或多个消费者之间须有共享对缓冲区进行操作的函数代码。六、设计方案:1、用 Java 编写程序,运行环境为Eclipse 。2、抽象化生产者与消费者之间的关系,即用线程来产生数据或者使用数据,定义的类有:(1) 、publicclass BufferLock湖北中医学院信息技术系操作系统课程设计第 2 页(2)、class Producer(3)、class Consumer 3、然后继承Thread (线程)来实现多个生产者与多个消费者之间的关系:(1

3、) 、class Producer extends Thread(2) 、class Consumer extends Thread4、还需要有一个缓冲区来存放数据,即通过缓冲区把生产者和消费者联系起来。5、synchronized关键字修饰方法,实现线程同步。七、流程图:创建“生产者”线程缓冲区是否阻塞“生产者”等待“消费者”取出缓冲区的数据创建“消费者”线程“消费者” 阻塞缓冲区是否 为空输入数据“生产者” 生产产品 后被唤醒NO NO YES 湖北中医学院信息技术系操作系统课程设计第 3 页八、运行结果1、截图一:2、截图二:湖北中医学院信息技术系操作系统课程设计第 4 页3、截图三:九

4、、源程序publicclass BufferLock / 加互斥锁的缓冲区 湖北中医学院信息技术系操作系统课程设计第 5 页privateintvalue ; / 共享变量privatebooleanisEmpty =true ; /value是否为空的信号量publicsynchronizedvoid put(int i) / 同步方法 while (!isEmpty ) / 当value 不空时,等待try this.wait(); / 使调用该方法的当前线程等待,即阻塞自己 catch (InterruptedException e) value = i; / 当value 空时, va

5、lue 获得值isEmpty = false; / 设置 value 为不空状态notifyAll(); / 唤醒其他所有等待线程 publicsynchronizedint get() / 同步方法 while ( isEmpty) / 当value 空时,等待try this.wait(); catch (InterruptedException e) isEmpty = true; / 设置 value 为空状态,并返回值notifyAll(); / 唤醒其他所有等待线程returnvalue ; class Producer extends Thread / 生产者 private B

6、ufferLock buffer; public Producer(BufferLock buffer) this. buffer = buffer; publicvoid run( ) 湖北中医学院信息技术系操作系统课程设计第 6 页for ( int i=1; i=20; i+) / 生产者往缓冲区中写入数120 buffer.put(i); System.out .println(Thread.currentThread().getName()+“ Producer put : “+i); class Consumer extends Thread / 消费者 private Buffe

7、rLock buffer; public Consumer(BufferLock buffer) this. buffer = buffer ; publicvoid run() for ( int i=1; i=20; i+) / 消费者从缓冲区中取数System. out .println(“ttt“+Thread.currentThread().getName()+“ Consumer get : “+buffer.get(); publicstaticvoid main (String args) BufferLock buffer = new BufferLock(); (new P

8、roducer(buffer).start(); / 构造两个生产者线程和两个消费者线程(new Consumer(buffer).start(); (new Producer(buffer).start(); (new Consumer(buffer).start(); 十、总结这次生产者与消费者之间的关系的实验我用Java语言编写的, 用关键字 synchronized来实现多个线程同步,用继承Thread来将生产者线程与消费者线程实例化。湖北中医学院信息技术系操作系统课程设计第 7 页其实,在做这个实验之前我的Java 语言编程老师讲过这些知识,正好可以巩固Java的一些知识。我还学过C+语言,这是大一下学期学的事了,我想要实现书上的P、V操作可以用 C+语言来编写。总之,通过该实验我更加清楚的认识到生产者与消费者这个经典问题实际上是线程同步问题的抽象描述,即计算机系统中的每个进程都可以消费(使用)或生产(释放)数据,进程释放数据相当于生产者,使用数据相当于消费者。十一、参考文献操作系统原理第四版庞丽萍编著华中科技大学出版社出版面向对象与Java程序设计朱福喜编著清华大学出版社出版

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号