已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河 北 建 筑 工 程 学 院实 验 报 告 年 月 日班级物联142姓名孙胜杰学号评分实验台号同组人员实验名称经典进程同步问题-生产者消费者问题模拟实现课程名称操作系统仪 器 名 称型号规格仪器编号装有eclipse软件和Java开发环境的PC机一台一 实验目的1 深刻理解进程同步的概念。2 掌握经典同步问题,生产者消费者问题。二 实验设备PC机三 实验内容 在Java开发环境下模拟经典进程同步问题,生产者消费者问题。四 程序的主要代码package 生产者与消费者问题;import java.util.LinkedList; import java.util.Scanner;class Storage / 仓库最大存储量 private final int MAX_SIZE = 100; / 仓库存储的载体 private LinkedList list = new LinkedList(); / 生产num个产品 public void produce(int num) / 同步代码段 synchronized (list) / 如果仓库剩余容量不足 while (list.size() + num MAX_SIZE) System.out.println(要生产的产品数量: + num + t库存量: + list.size() +t暂时不能执行生产任务!); System.out.println(进行生产操作(1),还是消费操作(0)?);try / 由于条件不满足,生产阻塞 list.wait(); catch (InterruptedException e) e.printStackTrace(); / 生产条件满足情况下,生产num个产品 for (int i = 1; i = num; +i) list.add(new Object(); System.out.println(已经生产产品数: + num + t现库存量: + list.size(); System.out.println(进行生产操作(1),还是消费操作(0)?);list.notifyAll(); / 消费num个产品 public void consume(int num) / 同步代码段 synchronized (list) / 如果仓库存储量不足 while (list.size() num) System.out.println(要消费的产品数量: + num + t库存量: + list.size() + t暂时不能执行生产任务!); System.out.println(进行生产操作(1),还是消费操作(0)?);try / 由于条件不满足,消费阻塞 list.wait(); catch (InterruptedException e) e.printStackTrace(); / 消费条件满足情况下,消费num个产品 for (int i = 1; i = num; +i) list.remove(); System.out.println(已经消费产品数: + num + t现库存量为: + list.size(); System.out.println(进行生产操作(1),还是消费操作(0)?);list.notifyAll(); / get/set方法 public LinkedList getList() return list; public void setList(LinkedList list) this.list = list; public int getMAX_SIZE() return MAX_SIZE; /生产者类Producer继承线程类Thread class Producer extends Thread / 每次生产的产品数量 private int num; / 所在放置的仓库 private Storage storage; / 构造函数,设置仓库 public Producer(Storage storage) this.storage = storage; / 线程run函数 public void run() produce(num); / 调用仓库Storage的生产函数 public void produce(int num) duce(num); / get/set方法 public int getNum() return num; public void setNum(int num) this.num = num; public Storage getStorage() return storage; public void setStorage(Storage storage) this.storage = storage; /消费者类Consumer继承线程类Thread class Consumer extends Thread / 每次消费的产品数量 private int num; / 所在放置的仓库 private Storage storage; / 构造函数,设置仓库 public Consumer(Storage storage) this.storage = storage; / 线程run函数 public void run() consume(num); / 调用仓库Storage的生产函数 public void consume(int num) storage.consume(num); / get/set方法 public int getNum() return num; public void setNum(int num) this.num = num; public Storage getStorage() return storage; public void setStorage(Storage storage) this.storage = storage; public class ProducerAndConsumer public static void main(String args) / 仓库对象 Storage storage = new Storage(); / 生产者对象 Producer p1 = new Producer(storage); Producer p2 = new Producer(storage); Producer p3 = new Producer(storage); Producer p4 = new Producer(storage); Producer p5 = new Producer(storage); Producer p6 = new Producer(storage); Producer p7 = new Producer(storage);Producer p8= new Producer(storage); Producer p9 = new Producer(storage); Producer p10 = new Producer(storage); / 消费者对象 Consumer c1 = new Consumer(storage); Consumer c2 = new Consumer(storage); Consumer c3 = new Consumer(storage); Consumer c4 = new Consumer(storage); Consumer c5 = new Consumer(storage);Consumer c6 = new Consumer(storage); Consumer c7 = new Consumer(storage); Consumer c8 = new Consumer(storage); Consumer c9 = new Consumer(storage); Consumer c10 = new Consumer(storage);System.out.println(已生产产品数量:0t已消费产品数量:0t库存量:0t最大存储空间:100);System.out.println(进行生产操作(1),还是消费操作(0)?);Scanner isProduer=new Scanner(System.in);for(int i =1;i10;i+)/System.out.println(进行生产操作(1),还是消费操作(0)?);if(isProduer.nextInt()=1)System.out.print(请输入要生产的产品数量:);Scanner p11=new Scanner(System.in);if(i=1)p1.setNum(p11.nextInt();p1.start();else if(i=2)p2.setNum(p11.nextInt();p2.start();else if(i=3)p3.setNum(p11.nextInt();p3.start();else if(i=4)p4.setNum(p11.nextInt();p4.start();else if(i=5)p5.setNum(p11.nextInt();p5.start();else if(i=6)p6.setNum(p11.nextInt();p6.start();else if(i=7)p7.setNum(p11.nextInt();p7.start();else if(i=8)p8.setNum(p11.nextInt();p8.start();else if(i=9)p9.setNum(p11.nextInt();p9.start();else if(i=10)p10.setNum(p11.nextInt();p10.start();elseSystem.out.print(请输入要消费的产品数量:);Scanner p12=new Scanner(System.in);if(i=1)c1.setNum(p12.nextInt();c1.start();else if(i=2)c2.setNum(p12.nextInt();c2.start();else if(i=3)c3.setNum(p12.nextInt();c3.start();else if(i=4)c4.setNum(p12.nextInt();c4.start();else if(i=5)c5.setNum(p12.nextInt();c5.start();else if(i=6)c6.setNum(p12.nextInt();c6.start();else if(i=7)c7.setNum(p12.nextInt();c7.start();else if(i=8)c8.setNum(p12.nextInt();c8.start();else if(i=9)c9.setNum(p12.nextInt();c9.start();else if(i=10)c10.setNum(p12.nextInt();c10.start(); 五、实验结果本程序应用Java软件开发,没有引入界面,需要使用可以运行java的eclipse等软件运行。程序目录为:生产者与消费者问题生产者
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 统编版五下六上学科融合劳动教材-香菜种植实践(同一班级进阶版)
- 多地点办公同步协调方法
- 2026浙江杭州市上泗中学诚聘初中语文、数学、英语、科学、社会教师(非事业)备考题库含答案详解(完整版)
- 2026年河南省三门峡市灵宝市事业单位联考招聘备考题库含答案详解(黄金题型)
- 2026广东湛江市坡头区生态环境保护督察整改工作领导小组办公室招聘1人备考题库含答案详解(夺分金卷)
- 2026赫章鑫晨建工(集团)有限公司招聘6人备考题库及答案详解(易错题)
- 2026安徽六安裕安区中医医院劳务派遣制工作人员招聘6人备考题库含答案详解(综合题)
- 2026重庆建峰工业集团有限公司招聘6人备考题库及完整答案详解
- 2026年安庆桐城中学教师招聘备考题库带答案详解
- 2026贵州黔南州罗甸县第一医共体罗妥分院面向社会招聘工作人员1人备考题库含答案详解(突破训练)
- 生态牛肉营销方案(3篇)
- 建设项目火灾应急演练脚本
- 2025年大学生提干选拔考试历年真题试卷及答案
- 传染病知识培训试题及答案
- 2026年重大事故隐患判定标准专项培训试卷及答案
- 2025-2026学年统编版(新教材)小学道德与法治三年级下册《少让父母操心》教学课件
- 2025年中国邮政经济金融笔试及答案
- 2024-2025学年广东省部分高中高二下学期期中考试历史试题(解析版)
- 钢结构劳务分包施工方案
- 市政工程项目分包与管理案例分析
- 2023年湖北省教师招聘特岗历年考题
评论
0/150
提交评论