package two;
public class Job {
private String name;//作业名称(ID)
private int execTime; //执行时间
private long startTime;//开始时间
private int endTime;//结束时间
private int totalTime;//周转时间
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getExecTime() {
return execTime;
}
public void setExecTime(int execTime) {
this.execTime = execTime;
}
public long getStartTime() {
return startTime;
}
public void setStartTime(long startTime) {
this.startTime = startTime;
}
public int getEndTime() {
return endTime;
}
public void setEndTime(int endTime) {
this.endTime = endTime;
}
public int getTotalTime() {
return totalTime;
}
public void setTotalTime(int totalTime) {
this.totalTime = totalTime;
}
public Job( long startTime,int execTime) {
super();
this.execTime = execTime;
this.startTime = startTime;
}
public Job(){}
}
package two;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class SJF {
// 所有的作业的集合
private static List<Job> jobs = new ArrayList<Job>();
//按执行时间排序
public static void sortList() {
Collections.sort(jobs, new Comparator<Job>() {
@Override
public int compare(Job job1, Job job2) {
return (int) (job1.getExecTime() - job2.getExecTime());
}
});
}
public static void main(String[] args) {
//单通道多任务同时到达
long startTime=System.currentTimeMillis();
Scanner scan=new Scanner(System.in);
System.out.println("请输入作业的数量:");
int jobNum=new Integer(scan.nextLine());
for(int i=0;i<jobNum;i++){
System.out.println("请输入第"+(i+1)+"个作业的名称:");
String name=scan.nextLine();
System.out.println("请输入第"+(i+1)+"个作业的执行时间:");
String executeTime=scan.nextLine();
Job job=new Job();
job.setName(name);
job.setExecTime(new Integer(executeTime));
job.setStartTime(startTime);
jobs.add(job);
}
sortList();
//计算每个任务的周转时间
int temp=0;
for(Job job:jobs){
//得到每个作业的执行时间
int execTime = job.getExecTime();
temp+=execTime; //执行时间加上等待时候
job.setTotalTime(temp);
}
//打印结果并求出平均周转时间
int sum=0;
for(int j=0;j<jobs.size();j++){
Job job=jobs.get(j);
int totalTime = job.getTotalTime();
System.out.println("作业("+job.getName()+") 的执行时间为:"+job.getExecTime()+"s 周转时间为:"+totalTime);
System.out.println("开始执行===");
try{
Thread.sleep(job.getExecTime()*1000);
}catch(Exception e){}
System.out.println(" ....."+job.getName()+"执行结束\n");
sum+=totalTime;
}
System.out.println("平均周转时间为:"+(sum*1.0/jobNum)+"s");
}
}
测试效果: