最新java生产者消费者问题.docx
- 文档编号:5745258
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:9
- 大小:91.66KB
最新java生产者消费者问题.docx
《最新java生产者消费者问题.docx》由会员分享,可在线阅读,更多相关《最新java生产者消费者问题.docx(9页珍藏版)》请在冰豆网上搜索。
最新java生产者消费者问题
java生产者消费者问题
操作系统课程设计(一号黑体加粗)
用多进程同步方法解决生产者-消费者问题
(小二黑体加粗)
院系:
班级:
学号:
姓名:
同组者:
时间:
目录(小二黑体加粗)
操作系统课程设计(一号黑体加粗)1
目录(小二黑体加粗)2
一、题目:
(标题2,即三号黑体加粗)2
二、设计目的:
2
三、总体设计思想概述:
3
四、说明:
3
五、设计要求:
3
六、设计方案:
3
七、流程图:
4
八、运行结果4
九、源程序6
十、总结8
十一、参考文献9
一、题目:
(标题2,即三号黑体加粗)
用多进程同步方法解决生产者-消费者问题。
二、设计目的:
通过研究Linux的进程机制和信号量实现生产者消费者问题的并发控制。
三、总体设计思想概述:
1、生产者—消费者问题是一种同步问题的抽象描述。
2、计算机系统中的每个进程都可以消费或生产某类资源。
当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。
3、而当某个进程释放资源时,则它就相当一个生产者。
四、说明:
有界缓冲区内设有20个存储单元,放入/取出的数据项设定为1-20这20个整型数。
五、设计要求:
1、每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者进程的标识符。
2、生产者和消费者各有两个以上。
3、多个生产者或多个消费者之间须有共享对缓冲区进行操作的函数代码。
六、设计方案:
1、用Java编写程序,运行环境为Eclipse。
2、抽象化生产者与消费者之间的关系,即用线程来产生数据或者使用数据,定义的类有:
(1)、publicclassBufferLock
(2)、classProducer
(3)、classConsumer
3、然后继承Thread(线程)来实现多个生产者与多个消费者之间的关系:
(1)、classProducerextendsThread
(2)、classConsumerextendsThread
4、还需要有一个缓冲区来存放数据,即通过缓冲区把生产者和消费者联系起来。
5、synchronized关键字修饰方法,实现线程同步。
七、流程图:
八、运行结果
1、截图一:
2、截图二:
3、截图三:
9、源程序
publicclassBufferLock//加互斥锁的缓冲区
{
privateintvalue;//共享变量
privatebooleanisEmpty=true;//value是否为空的信号量
publicsynchronizedvoidput(inti)//同步方法
{
while(!
isEmpty)//当value不空时,等待
try
{
this.wait();//使调用该方法的当前线程等待,即阻塞自己
}
catch(InterruptedExceptione){}
value=i;//当value空时,value获得值
isEmpty=false;//设置value为不空状态
notifyAll();//唤醒其他所有等待线程
}
publicsynchronizedintget()//同步方法
{
while(isEmpty)//当value空时,等待
try
{
this.wait();
}
catch(InterruptedExceptione){}
isEmpty=true;//设置value为空状态,并返回值
notifyAll();//唤醒其他所有等待线程
returnvalue;
}
}
classProducerextendsThread//生产者
{
privateBufferLockbuffer;
publicProducer(BufferLockbuffer)
{
this.buffer=buffer;
}
publicvoidrun()
{
for(inti=1;i<=20;i++)//生产者往缓冲区中写入数1~20
{
buffer.put(i);
System.out.println(Thread.currentThread().getName()+"Producerput:
"+i);
}
}
}
classConsumerextendsThread//消费者
{
privateBufferLockbuffer;
publicConsumer(BufferLockbuffer)
{
this.buffer=buffer;
}
publicvoidrun()
{
for(inti=1;i<=20;i++)//消费者从缓冲区中取数
System.out.println("\t\t\t"+Thread.currentThread().getName()+"Consumerget:
"+buffer.get());
}
publicstaticvoidmain(Stringargs[])
{
BufferLockbuffer=newBufferLock();
(newProducer(buffer)).start();//构造两个生产者线程和两个消费者线程
(newConsumer(buffer)).start();
(newProducer(buffer)).start();
(newConsumer(buffer)).start();
}
}
十、总结
这次生产者与消费者之间的关系的实验我用Java语言编写的,用关键字synchronized来实现多个线程同步,用继承Thread来将生产者线程与消费者线程实例化。
其实,在做这个实验之前我的Java语言编程老师讲过这些知识,正好可以巩固Java的一些知识。
我还学过C++语言,这是大一下学期学的事了,我想要实现书上的P、V操作可以用C++语言来编写。
总之,通过该实验我更加清楚的认识到生产者与消费者这个经典问题实际上是线程同步问题的抽象描述,即计算机系统中的每个进程都可以消费(使用)或生产(释放)数据,进程释放数据相当于生产者,使用数据相当于消费者。
十一、参考文献
《操作系统原理》第四版庞丽萍编著华中科技大学出版社出版
《面向对象与Java程序设计》朱福喜编著清华大学出版社出版
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 java 生产者 消费者 问题