用Java语言写一个完整可运行的程序,最短进程优先(sjf) 程序要求: 能正常运行,输入进程名称,到达时间,和运行时间,输出平均周转时间,输出调度顺序 额外要求:拥有图形界面,使用持久化数据保存,完成抢占式调度
时间: 2024-10-15 10:11:33 浏览: 6
在Java中创建一个完整的进程调度程序,特别是涉及 SJF (Shortest Job First) 算法以及图形用户界面(GUI)和持久化数据,可以涉及到多个模块。这里提供一个简化版的基础示例,展示了如何处理核心调度算法,并通过文件操作实现数据持久化。真正的 GUI 部分通常需要使用像JavaFX或Swing这样的库,这超出了基础文本描述范围。
首先,我们假设有一个简单的`Process`类,用于存储进程信息:
```java
import java.io.FileWriter;
import java.io.IOException;
public class Process {
private String name;
private int arrivalTime;
private int burstTime;
public Process(String name, int arrivalTime, int burstTime) {
this.name = name;
this.arrivalTime = arrivalTime;
this.burstTime = burstTime;
}
// 获取ters and setters...
}
// SJF 调度器
public class SJFScheduler {
public static void sjfSort(Process[] processes) {
// 按照到达时间和总需求(burst time + 到达时间)排序
Arrays.sort(processes, Comparator.comparingInt(p -> p.getArrivalTime() + p.getBurstTime()));
}
public static double calculateTurnaroundTime(Process[] processes) {
double sum = 0;
for (Process p : processes) {
sum += p.getBurstTime() + (p.getArrivalTime() - processes[0].getArrivalTime());
}
return sum / processes.length;
}
}
```
为了实现持久化,你可以添加一个方法将进程信息写入文件:
```java
private static void saveProcessesToCSV(String filename, Process[] processes) {
try (FileWriter writer = new FileWriter(filename)) {
for (Process process : processes) {
writer.append(process.getName()).append(",").append(process.getArrivalTime()).append(",")
.append(process.getBurstTime()).append("\n");
}
} catch (IOException e) {
System.out.println("Error saving to file: " + e.getMessage());
}
}
public static void main(String[] args) {
Process[] processes = ... // 初始化你的进程列表
sjfSort(processes);
double avgTurnAroundTime = SJFScheduler.calculateTurnaroundTime(processes);
saveProcessesToCSV("processes.csv", processes);
// 输出调度顺序和平均周转时间
System.out.println("Scheduling order:");
for (Process process : processes) {
System.out.println(process.getName());
}
System.out.printf("Average Turnaround Time: %.2f\n", avgTurnAroundTime);
}
```
至于图形界面部分,你需要学习如何设计UI、使用事件驱动模型以及数据绑定,这将涉及JavaFX或Swing库的具体用法。这部分代码会相对复杂得多,不适合在此详细展示。
阅读全文