首页 > 文章列表 > Java如何实现作业调度

Java如何实现作业调度

java
370 2023-04-30

Java如何实现作业调度

Java实现作业调度

要求

Java实现SJF算法调度,要求测试数据可以随即输入或从文件中读入;

必须要考虑到作业的到达时间;

最终能够计算每一个作业的周转时间、带权周转时间,给代码加中文注释

参考代码

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("作业" + job.jobId + "的周转时间为" + job.turnover + ",带权周转时间为" + job.weightTurnover);

        }



        System.out.println("平均周转时间为" + (double) totalTurnover / jobList.size());

        System.out.println("带权平均周转时间为" + totalWeightTurnover / jobList.size());

    }

}

运行效果