JAVA从入门到精通之实现进程调度算法 RR(时间片轮转)
沉沙 2019-01-03 来源 : 阅读 1700 评论 0

摘要:本篇教程探讨了JAVA从入门到精通之实现进程调度算法 RR(时间片轮转),希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇教程探讨了JAVA从入门到精通之实现进程调度算法 RR(时间片轮转),希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

JAVA从入门到精通之实现进程调度算法 RR(时间片轮转)

<

RR类(主类)
只有calc()中涉及了算法,init()和printResult()都只有简单的输入输出操作。
  1 package xqy.algorithm;
  2 
  3 import java.util.*;
  4 
  5 import xqy.Util.Tools;
  6 import xqy.been.Process;
  7 
  8 /**
  9  * @author xqy
 10  * @date 2018年12月19日19:14:49
 11  */
 12 public class RR {
 13     private int processNumber;
 14     private ArrayList<Process> processList;
 15     private int timeSlice;
 16     
 17     public RR() {
 18         init();
 19         calc();
 20         Tools.printResult(processList);
 21     }
 22 
 23     private void init() {
 24         Scanner sc = new Scanner(System.in);
 25 
 26         System.out.print("<RR> Please enter the slice time:");
 27         timeSlice = sc.nextInt();
 28         System.out.print("<RR> please enter the process num:");
 29         processNumber = sc.nextInt();
 30 
 31         processList = new ArrayList<Process>();
 32         for (int i = 0; i < processNumber; i++) {
 33             processList.add(new Process());
 34         }
 35 
 36         System.out.println("<RR> Please enter each process arrival time:");
 37         for (int i = 0; i < processNumber; i++) {
 38             System.out.print("    Process" + (i + 1) + ":");
 39             processList.get(i).setArrivalTime(sc.nextInt());
 40         }
 41 
 42         System.out.println("<RR> Please enter each process service time:");
 43         for (int i = 0; i < processNumber; i++) {
 44             System.out.print("    Process" + (i + 1) + ":");
 45             int servicesTime = sc.nextInt();
 46             System.out.println();
 47             
 48             processList.get(i).setServicesTime(servicesTime);
 49             processList.get(i).setRemainServiceTime(servicesTime);
 50         }
 51     }
 52 
 53     private void calc() {
 54         int timeNow = 0;
 55         int processRemain = processNumber;
 56         Process opProcess;
 57         
 58         while (processRemain != 0) {
 59             for (int i = 0; i < processNumber; i++) {
 60                 opProcess = processList.get(i);
 61                 
 62                 if (opProcess.getRemainServiceTime() > 0) {                    
 63                     // First time
 64                     if (opProcess.getServicesTime() == opProcess.getRemainServiceTime()) {
 65                         int waitTime = timeNow - opProcess.getArrivalTime();
 66                         
 67                         opProcess.setStartTime(timeNow);
 68                         opProcess.setWaitTime(waitTime);                        
 69                     }
 70 
 71                     // Calculating remain service time
 72                     int remainServiceTime = opProcess.getRemainServiceTime() - timeSlice;
 73                     opProcess.setRemainServiceTime(remainServiceTime);
 74                     
 75                     // Last time
 76                     if (remainServiceTime <= 0) {
 77                         int completionTime = timeNow + timeSlice; // 进程是运行完当前时间片才结束的
 78                         int turnAroundTime = completionTime
 79                                 - opProcess.getArrivalTime();
 80                         double turnAroundTimeWithWeight = 1.0 * turnAroundTime
 81                                 / opProcess.getServicesTime();
 82                         
 83                         opProcess.setCompletionTime(completionTime);
 84                         opProcess.setTurnAroundTime(turnAroundTime);
 85                         opProcess.setTurnAroundTimeWithWeight(
 86                                 turnAroundTimeWithWeight);
 87                         
 88                         processRemain--;
 89                     }
 90                     
 91                     System.out.println("    #STEP#Process" + (i + 1) + " remain service time:" + opProcess.getRemainServiceTime() + ((remainServiceTime <= 0)?" Finish":""));
 92                     timeNow += timeSlice;
 93                 } else {
 94                     // do noting, because this process has been completed.
 95                 }
 96                 
 97             } 
 98         }
 99     }
100     
101     public static void main(String [] args) {
102         new RR();
103     }
104 }
Process类
模拟了进程,对属性进行了封装。
 1 package xqy.been;
 2 
 3 public class Process {
 4     private int arrivalTime;
 5     private int servicesTime;
 6     private int remainServiceTime;
 7     private int startTime;
 8     private int waitTime;
 9     private int completionTime;
10     
11     /**
12      * turnAroundTime = completionTime - arrivalTime
13      */
14     private int turnAroundTime;
15     
16     /**
17      * turnAroundTimeWithWeight = turnAroundTime / servicesTime
18      */
19     private double turnAroundTimeWithWeight;
20     
21     public Process() {
22         ;
23     }
24 
25     public int getArrivalTime() {
26         return arrivalTime;
27     }
28 
29     public void setArrivalTime(int arrivalTime) {
30         this.arrivalTime = arrivalTime;
31     }
32 
33     public int getServicesTime() {
34         return servicesTime;
35     }
36 
37     public void setServicesTime(int servicesTime) {
38         this.servicesTime = servicesTime;
39     }
40 
41     public int getRemainServiceTime() {
42         return remainServiceTime;
43     }
44 
45     public void setRemainServiceTime(int remainServiceTime) {
46         this.remainServiceTime = remainServiceTime;
47     }
48 
49     public int getStartTime() {
50         return startTime;
51     }
52 
53     public void setStartTime(int startTime) {
54         this.startTime = startTime;
55     }
56 
57     public int getWaitTime() {
58         return waitTime;
59     }
60 
61     public void setWaitTime(int waitTime) {
62         this.waitTime = waitTime;
63     }
64 
65     public int getCompletionTime() {
66         return completionTime;
67     }
68 
69     public void setCompletionTime(int completionTime) {
70         this.completionTime = completionTime;
71     }
72 
73     public int getTurnAroundTime() {
74         return turnAroundTime;
75     }
76 
77     public void setTurnAroundTime(int turnAroundTime) {
78         this.turnAroundTime = turnAroundTime;
79     }
80 
81     public double getTurnAroundTimeWithWeight() {
82         return turnAroundTimeWithWeight;
83     }
84 
85     public void setTurnAroundTimeWithWeight(double turnAroundTimeWithWeight) {
86         this.turnAroundTimeWithWeight = turnAroundTimeWithWeight;
87     }
88 
89     @Override
90     public String toString() {
91         return "Process [arrivalTime=" + arrivalTime + ", servicesTime="
92                 + servicesTime + ", remainServiceTime=" + remainServiceTime
93                 + ", startTime=" + startTime + ", waitTime=" + waitTime
94                 + ", completionTime=" + completionTime + ", turnAroundTime="
95                 + turnAroundTime + ", turnAroundTimeWithWeight="
96                 + turnAroundTimeWithWeight + "]";
97     }
98 }
 
Tools类
因为我这次作业要实现几个类似的算法,所以我把每个算法中都要用到的方法都提取出来作为单独的工具类。
也可以将这些工具方法都放入FCFS类中。
 1 package xqy.Util;
 2 
 3 import java.util.ArrayList;
 4 
 5 import xqy.been.Process;
 6 
 7 public class Tools {
 8 
 9     public static double calcAverageTurnAroundTime(
10             ArrayList<Process> processList) {
11         double sum = 0;
12         for (int i = 0; i < processList.size(); i++) {
13             sum += processList.get(i).getTurnAroundTime();
14         }
15         return Math.round(sum / processList.size() * 100) / 100.0;
16     }
17 
18     public static double calcAverageTurnAroundTimeWithWeight(
19             ArrayList<Process> processList) {
20         double sum = 0;
21         for (int i = 0; i < processList.size(); i++) {
22             sum += processList.get(i).getTurnAroundTimeWithWeight();
23         }
24         return Math.round(sum / processList.size() * 100) / 100.0;
25     }
26 
27     public static void printResult(ArrayList<Process> processList) {
28         System.out.println("\n    #RESULT#");
29 
30         System.out.print("\tArrive:\t\t");
31         for (int i = 0; i < processList.size(); i++) {
32             System.out.print(processList.get(i).getArrivalTime() + "\t");
33         }
34         System.out.println();
35 
36         System.out.print("\tService:\t");
37         for (int i = 0; i < processList.size(); i++) {
38             System.out.print(processList.get(i).getServicesTime() + "\t");
39         }
40         System.out.println();
41 
42         System.out.print("\tStart:\t\t");
43         for (int i = 0; i < processList.size(); i++) {
44             System.out.print(processList.get(i).getStartTime() + "\t");
45         }
46         System.out.println();
47 
48         System.out.print("\tWait:\t\t");
49         for (int i = 0; i < processList.size(); i++) {
50             System.out.print(processList.get(i).getWaitTime() + "\t");
51         }
52         System.out.println();
53 
54         System.out.print("\tFinish:\t\t");
55         for (int i = 0; i < processList.size(); i++) {
56             System.out.print(processList.get(i).getCompletionTime() + "\t");
57         }
58         System.out.println();
59 
60         System.out.print("\tTurn around:\t");
61         for (int i = 0; i < processList.size(); i++) {
62             System.out.print(processList.get(i).getTurnAroundTime() + "\t");
63         }
64         System.out.println();
65 
66         System.out.print("\tTA wight:\t");
67         for (int i = 0; i < processList.size(); i++) {
68             System.out.print(Math.round(processList.get(i)
69                     .getTurnAroundTimeWithWeight() * 100) / 100.0 + "\t");
70         }
71         System.out.println();
72 
73         System.out.println("\tAverage turn around time:"
74                 + Tools.calcAverageTurnAroundTime(processList) + "\t");
75         System.out.println("\tAverage turn around time with wight:"
76                 + Tools.calcAverageTurnAroundTimeWithWeight(processList));
77         
78         System.out.println();
79     }
80 }    

本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程