Java实现先来先服务算法,PCB里需要有进程名,进程状态,运行时间和到达时间
时间: 2024-03-13 13:47:25 浏览: 54
好的,这里是 Java 实现先来先服务算法的示例代码:
```java
import java.util.*;
public class FCFS {
// 定义进程类
static class Process {
String name; // 进程名
int status; // 进程状态,0 表示未到达,1 表示就绪,2 表示运行,3 表示完成
int arriveTime; // 到达时间
int runTime; // 运行时间
public Process(String name, int status, int arriveTime, int runTime) {
this.name = name;
this.status = status;
this.arriveTime = arriveTime;
this.runTime = runTime;
}
}
public static void main(String[] args) {
// 初始化进程列表
List<Process> processes = new ArrayList<>();
processes.add(new Process("P1", 0, 0, 3));
processes.add(new Process("P2", 0, 2, 6));
processes.add(new Process("P3", 0, 4, 4));
processes.add(new Process("P4", 0, 6, 2));
processes.add(new Process("P5", 0, 8, 5));
int currentTime = 0; // 当前时间
int finishedCount = 0; // 已完成的进程数
Process runningProcess = null; // 当前正在运行的进程
while (finishedCount < processes.size()) {
// 找到到达时间最早的进程
Process earliestProcess = null;
for (Process process : processes) {
if (process.status == 0 && process.arriveTime <= currentTime) {
if (earliestProcess == null || process.arriveTime < earliestProcess.arriveTime) {
earliestProcess = process;
}
}
}
if (earliestProcess != null) {
// 运行进程
earliestProcess.status = 2;
runningProcess = earliestProcess;
System.out.println("时间 " + currentTime + " 运行进程 " + runningProcess.name + ",剩余时间 " + runningProcess.runTime);
} else if (runningProcess != null) {
// 继续运行进程
runningProcess.runTime--;
System.out.println("时间 " + currentTime + " 继续运行进程 " + runningProcess.name + ",剩余时间 " + runningProcess.runTime);
if (runningProcess.runTime == 0) {
// 完成进程
runningProcess.status = 3;
finishedCount++;
System.out.println("时间 " + (currentTime + 1) + " 完成进程 " + runningProcess.name);
runningProcess = null;
}
}
currentTime++;
}
System.out.println("所有进程完成,总耗时 " + currentTime);
}
}
```
在这个示例代码中,我们同样定义了一个 `Process` 类来表示进程,包含进程名、状态、到达时间和运行时间。在主函数中,我们初始化了一组进程,并按照先来先服务算法的规则,找到到达时间最早的进程进行运行。当一个进程运行完成后,我们将其状态设置为已完成,并统计已完成的进程数。最终输出完成所有进程的总耗时。
阅读全文