Java實(shí)現(xiàn)作業(yè)調(diào)度的示例代碼
Java實(shí)現(xiàn)作業(yè)調(diào)度
要求
Java實(shí)現(xiàn)SJF算法調(diào)度,要求測試數(shù)據(jù)可以隨即輸入或從文件中讀入;
必須要考慮到作業(yè)的到達(dá)時間;
最終能夠計(jì)算每一個作業(yè)的周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間,給代碼加中文注釋
參考代碼
import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Random; public class test { static class Job { public int jobId; public int arriveTime; public int needTime; public int finishTime; public int turnover; public double weightTurnover; public Job(int jobId, int arriveTime, int needTime) { this.jobId = jobId; this.arriveTime = arriveTime; this.needTime = needTime; } } public static void main(String[] args) { List<Job> jobList = new ArrayList<>(); Random random = new Random(); int jobSize = 5; int rangeArriveTime = 5; int rangeNeedTime = 10; for (int i = 0; i < jobSize; i++) { Job job = new Job(i, random.nextInt(rangeArriveTime), random.nextInt(rangeNeedTime) + 1); jobList.add(job); } jobList.sort(Comparator.comparingInt(o -> o.arriveTime)); int currentTime = 0; int totalTurnover = 0; double totalWeightTurnover = 0; int completeJobNum = 0; while (completeJobNum < jobList.size()) { int shortestNeedTime = Integer.MAX_VALUE; Job shortestNeedJob = null; for (Job job : jobList) { if (job.finishTime > 0) { continue; } if (job.arriveTime <= currentTime && job.needTime < shortestNeedTime) { shortestNeedTime = job.needTime; shortestNeedJob = job; } } currentTime += shortestNeedJob.needTime; shortestNeedJob.finishTime = currentTime; shortestNeedJob.turnover = shortestNeedJob.finishTime - shortestNeedJob.arriveTime; shortestNeedJob.weightTurnover = (double) shortestNeedJob.turnover / shortestNeedJob.needTime; totalTurnover += shortestNeedJob.turnover; totalWeightTurnover += shortestNeedJob.weightTurnover; completeJobNum++; } for (Job job : jobList) { System.out.println("作業(yè)" + job.jobId + "的周轉(zhuǎn)時間為" + job.turnover + ",帶權(quán)周轉(zhuǎn)時間為" + job.weightTurnover); } System.out.println("平均周轉(zhuǎn)時間為" + (double) totalTurnover / jobList.size()); System.out.println("帶權(quán)平均周轉(zhuǎn)時間為" + totalWeightTurnover / jobList.size()); } }
運(yùn)行效果
到此這篇關(guān)于Java實(shí)現(xiàn)作業(yè)調(diào)度的示例代碼的文章就介紹到這了,更多相關(guān)Java作業(yè)調(diào)度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript中棧和隊(duì)列應(yīng)用詳情
這篇文章主要介紹了JavaScript中棧和隊(duì)列應(yīng)用詳情,棧如果用數(shù)組模擬的話是類似于一個U形桶狀堆??臻g,文章圍繞制圖展開詳細(xì)的內(nèi)容展開更多相關(guān)內(nèi)容,需要的小伙伴可以參考一下2022-06-06SpringBoot實(shí)現(xiàn)讀取YML,yaml,properties文件
yml,yaml,properties三種文件都是用來存放配置的文件,一些靜態(tài)數(shù)據(jù),配置的數(shù)據(jù)都會存放到里邊。本文主要為大家整理了SpringBoot實(shí)現(xiàn)讀取YML,yaml,properties文件的方法,需要的可以參考一下2023-04-04SpringBoot創(chuàng)建多模塊項(xiàng)目的全過程記錄
這篇文章主要給大家介紹了關(guān)于SpringBoot創(chuàng)建多模塊項(xiàng)目的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01java如何確定一個鏈表有環(huán)及入口節(jié)點(diǎn)
這篇文章主要介紹了java如何確定一個鏈表有環(huán)及入口節(jié)點(diǎn),想了解數(shù)據(jù)結(jié)構(gòu)的同學(xué)可以參考下2021-04-04Java基于API接口爬取商品數(shù)據(jù)的示例代碼
Java作為一種流行的編程語言,可以用于編寫程序來調(diào)用這些API接口,從而獲取商品數(shù)據(jù),本文將介紹如何使用Java基于API接口爬取商品數(shù)據(jù),包括請求API、解析JSON數(shù)據(jù)、存儲數(shù)據(jù)等步驟,并提供相應(yīng)的代碼示例,感興趣的朋友跟隨小編一起看看吧2023-10-10詳解PipedInputStream和PipedOutputStream_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了管道PipedInputStream和PipedOutputStream,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05