package 多道程序设计;import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;public class Main {public static Queue<Procedure> waitQueue = new LinkedList<>();public static Queue<Procedure> setoutQueue = new LinkedList<>();public static int cut = 0; // 通道数;public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(true) {try {System.out.println("请输入程序数:");int t = sc.nextInt();for (int i = 0; i < t; i++) {System.out.println("请输入程序名:");String s = sc.next();System.out.println("请输入 计算时间 IO时间 计算时间:");int a = sc.nextInt();int b = sc.nextInt();int c = sc.nextInt();sc.nextLine();waitQueue.offer(new Procedure(s, a, b, c));}solve();} catch (Exception e) {System.out.println("\nerror:请正确输入数据\n(1)请输入正整数,时间单位为ms\n(2)格式为: 计算 IO 计算");}while(true) {System.out.println("是否继续进行(Y/N)");String s = sc.next();if(s.trim().equals("Y"))break;else if(s.trim().equals("N"))System.exit(0);System.out.println("请正确输入!");}}}private static void solve() {while (!waitQueue.isEmpty() || !setoutQueue.isEmpty()) {if (waitQueue.isEmpty()) {while (!setoutQueue.isEmpty()) {Procedure procedure2 = setoutQueue.poll(); // 进行IO操作的io(procedure2);System.out.println("程序" + procedure2.name + "在CPU上运行" + procedure2.cpu2 + "ms,程序运行完毕!");}}if (setoutQueue.isEmpty()) {if (waitQueue.isEmpty())continue;Procedure procedure = waitQueue.poll();cpu(procedure);setoutQueue.offer(procedure);} else {Procedure procedure1 = waitQueue.poll(); // 需要去CPU运行的Procedure procedure2 = setoutQueue.poll(); // 进行IO操作的long t1 = procedure1.cpu1;long t2 = procedure2.io;if (t1 >= t2) {io(procedure2);System.out.println("程序" + procedure1.name + "在CPU上运行" + t2 + "ms");procedure1.cpu1 = t1 - t2;System.out.println("程序" + procedure2.name + "在CPU上运行" + procedure2.cpu2 + "ms,程序运行完毕!");((LinkedList<Procedure>) waitQueue).offerFirst(procedure1);} else {zt(procedure1, procedure2);}}}}private static void zt(Procedure procedure1, Procedure procedure2) {long t1 = procedure1.cpu1;long T = procedure2.io;System.out.println("程序" + procedure2.name + "进行io操作" + T + "ms");while (t1 < T && !waitQueue.isEmpty()) {T -= t1;procedure1.cpu1 = 0;System.out.println("程序" + procedure1.name + "在CPU上运行" + procedure1.cpu1 + "ms");setoutQueue.offer(procedure1);procedure1 = waitQueue.poll();t1 = procedure1.cpu1;}((LinkedList<Procedure>) waitQueue).offerFirst(procedure1);System.out.println("程序" + procedure2.name + "在CPU上运行" + procedure2.cpu2 + "ms,程序运行完毕!");}private static void cpu(Procedure procedure) {System.out.println("程序" + procedure.name + "在CPU上运行" + procedure.cpu1 + "ms");procedure.cpu1 = 0;}private static void io(Procedure procedure) {System.out.println("程序" + procedure.name + "进行io操作" + procedure.io + "ms");procedure.io = 0;}}class Procedure {String name;long cpu1;long io;long cpu2;public Procedure(String name, long cpu1, long io, long cpu2) {this.name = name;this.cpu1 = cpu1;this.io = io;this.cpu2 = cpu2;}
}/*3 A 30 40 10B60 30 10C20 40 25 A 30 40 20 B 30 30 10 C 20 40 20 D 60 20 30 E 10 10 10*/

java实现模拟多道程序设计相关推荐

  1. [计算机毕设]基于java的模拟写字板的设计与实现(项目报告+答辩PPT+源代码+数据库)

    项目说明报告 基于Java的模拟写字板的设计与实现 目前,很多新的技术领域都涉及到了Java语言,Java语言是面向对象编程,并且涉及到网络.多线程等重要的基础知识,因此Java语言也是学习面向对象编 ...

  2. [课程设计]模拟操作系统的设计与实现

    下载地址 需求分析: 通过模拟操作系统的实现,加深对操作系统工作原理理解,进一步了解操作系统的实现方法,并可练习合作完成系统的团队精神和提高程序设计能力.该操作系统是模拟一个采用多道程序设计方法的单用 ...

  3. Java图形化界面设计——容器(JFrame)

    Java图形化界面设计--容器(JFrame) 程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构 ...

  4. java语言模拟_Java语言模拟操作系统.doc

    河北大学2010级操作系统课程设计论文 PAGE PAGE 27 装订线 装 订 线 (指导教师用表) 学 生 姓 名 指 导 教 师 论文(设计)题目 Java语言模拟操作系统 主要研究 (设计)内 ...

  5. 基于Java的雷电游戏设计(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 基于Java的雷电游戏 摘   要    电脑游戏,是指在计算机上能够运转的游戏软件.这种软件具 ...

  6. java多线程模拟龟兔赛跑,JAVA多线程模拟龟兔赛跑

    JAVA多线程模拟龟兔赛跑! class Rabbit extends Thread{ Tortoise tor; int Journey; int RabbitSpeed; public Rabbi ...

  7. java多线程模拟购买火车票

    java多线程模拟购买火车票 本次做的是一个火车票的售卖模拟,不管用户是在窗口还是APP上购买,必然不可能买到同一张票这也就是说一张票的售卖必然是一个线程在操作的,所以,我们在写代码是也要注意这一点 ...

  8. 解析java实现模拟USB接口的功能

    解析java实现模拟USB接口的功能 1 题目 模拟USB接口的功能 我们在使用计算机的时候经常会用到USB接口,鼠标.键盘等都是带USB接口的设备,我们只需要将鼠标.键盘插入到计算机的USB接口中就 ...

  9. 基于java的模拟写字板系统设计与实现(项目报告+开题报告+答辩PPT+源代码+部署视频)

    项目报告 基于Java的模拟写字板的设计与实现 目前,很多新的技术领域都涉及到了Java语言,Java语言是面向对象编程,并且涉及到网络.多线程等重要的基础知识,因此Java语言也是学习面向对象编程和 ...

  10. java 复杂网络分析_基于复杂网络的Java程序分析工具设计与实现思路浅谈

    基于复杂网络的Java程序分析工具设计与 实现思路浅谈 摘要:近年来,随着科学技术的进步,计算机技术发展速度的加快,使得软件价值也逐步提高,不管是软件系统的应用领域,还是其规模均获得了相应的扩大,且软 ...

最新文章

  1. Exchange 2013 OWA搜索邮件失败问题处理
  2. 简述Docker过去6个月的变化
  3. 微信小程序编译 tunneling socket could not be established,cause=connect ······
  4. 为加密的NTFS分区制作一把备份密钥
  5. Fastify 2.2.0 和 1.14.5 发布,极速 Node.js Web 框架
  6. jQuery 学习笔记之二 (jQuery代码风格)
  7. Android 4.2 通知通过PendingIntent启动Activity失败的问题
  8. mysql数据库面试总结
  9. 测试每个阶段需要输出的文档
  10. c语言编译如何去掉warning,16种C语言编译警告(Warning)类型的解决方法
  11. 猎洞高手Orange Tsai 亲自讲解 ProxyShell write-up
  12. 基于Lua语言的wireshark插件编写
  13. linux查看完整历史记录
  14. Python读写xlsx文件
  15. Ubuntu18.04创建WiFi热点
  16. 计算机维修培训教材,计算机芯片级维中心(芯片级维修培训教材)b.doc
  17. 猜年龄python实现
  18. 9款好看又实用的手机APP UI模板
  19. 六、Django-Registration-Redux的基本使用
  20. V8、JSCore、Hermes、QuickJS,hybrid开发JS引擎怎么选

热门文章

  1. 全面解析免费及收费SSH工具的基本特性和总结
  2. 坯子库无法一键安装插件没用_坯子插件库_SketchUp坯子库(su插件管理器)下载 v2018.3官方版 - 121下载站...
  3. ACM题目推荐(刘汝佳书上出现的一些题目)
  4. Apollo无人驾驶系统基础入门(云服务+感知(一))
  5. 暨反欺诈建模场景实操
  6. 西门子触摸屏脚本程序_西门子PLC触摸屏如何编写程序
  7. SSD选购扫盲指南M.2接口硬盘选择:NVMe于sata3
  8. tbschedule源码学习
  9. 装机安装必备开发软件
  10. Windows操作系统装机必备软件,值得收藏!