Java實(shí)現(xiàn)作業(yè)調(diào)度的示例代碼
Java實(shí)現(xiàn)作業(yè)調(diào)度
要求
Java實(shí)現(xiàn)SJF算法調(diào)度,要求測(cè)試數(shù)據(jù)可以隨即輸入或從文件中讀入;
必須要考慮到作業(yè)的到達(dá)時(shí)間;
最終能夠計(jì)算每一個(gè)作業(yè)的周轉(zhuǎn)時(shí)間、帶權(quán)周轉(zhuǎn)時(shí)間,給代碼加中文注釋
參考代碼
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)時(shí)間為" + job.turnover + ",帶權(quán)周轉(zhuǎn)時(shí)間為" + job.weightTurnover);
}
System.out.println("平均周轉(zhuǎn)時(shí)間為" + (double) totalTurnover / jobList.size());
System.out.println("帶權(quán)平均周轉(zhuǎn)時(shí)間為" + totalWeightTurnover / jobList.size());
}
}運(yùn)行效果

到此這篇關(guān)于Java實(shí)現(xiàn)作業(yè)調(diào)度的示例代碼的文章就介紹到這了,更多相關(guān)Java作業(yè)調(diào)度內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot?使用AOP?+?Redis?防止表單重復(fù)提交的方法
Spring?Boot是一個(gè)用于構(gòu)建Web應(yīng)用程序的框架,通過AOP可以實(shí)現(xiàn)防止表單重復(fù)提交,本文介紹了在Spring?Boot應(yīng)用程序中使用AOP和Redis來防止表單重復(fù)提交的方法,需要的朋友可以參考下2023-04-04
java提取json中某個(gè)數(shù)組的所有值方法
下面小編就為大家分享一篇java提取json中某個(gè)數(shù)組的所有值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03
SpringBoot+Ajax+redis實(shí)現(xiàn)隱藏重要接口地址的方法
這篇文章主要介紹了SpringBoot+Ajax+redis實(shí)現(xiàn)隱藏重要接口地址,本篇文章主要講訴使用SpringBoot項(xiàng)目配合Ajax和redis實(shí)現(xiàn)隱藏重要接口地址,這里我以隱藏秒殺地址為例,需要的朋友可以參考下2024-03-03
springboot實(shí)現(xiàn)分頁(yè)功能的完整代碼
Spring Boot是一個(gè)快速開發(fā)框架,它提供了很多便捷的功能,其中包括分頁(yè)查詢,下面這篇文章主要給大家介紹了關(guān)于springboot實(shí)現(xiàn)分頁(yè)功能的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
mybatis自定義類型處理器TypehHandler示例詳解
我們?cè)趯憁apper映射器的配置文件時(shí),不經(jīng)意間已經(jīng)用到類型轉(zhuǎn)換,不過是mybatis幫我們完成的,下面這篇文章主要給大家介紹了關(guān)于mybatis自定義類型處理器TypehHandler的相關(guān)資料,需要的朋友可以參考下2018-09-09
SpringBoot整合多個(gè)Mq服務(wù)做法詳解
SpringBoot整合rabbitmq很容易,但是整合的目的是為了使用,那要使用rabbitmq就要對(duì)其有一定的了解,不然容易整成一團(tuán)漿糊。因?yàn)檎f到底,SpringBoot只是在封裝rabbitmq的API,讓其更容易使用而已,廢話不多說,讓我們一起整它2023-02-02
Spring中的@CrossOrigin注解的使用詳細(xì)解讀
這篇文章主要介紹了Spring中的@CrossOrigin注解的使用詳細(xì)解讀,跨源資源共享(CORS),是由大多數(shù)瀏覽器實(shí)現(xiàn)的W3C規(guī)范,允許對(duì)跨域請(qǐng)求進(jìn)行靈活授權(quán),用來代替IFRAME或JSONP等非正規(guī)實(shí)現(xiàn)方式,需要的朋友可以參考下2023-11-11

