You are on page 1of 3

import java.util.

*;

class Process {

int id;

int arrivalTime;

int burstTime;

int remainingTime;

public Process(int id, int arrivalTime, int burstTime) {

this.id = id;

this.arrivalTime = arrivalTime;

this.burstTime = burstTime;

this.remainingTime = burstTime;

public class SRTFScheduling {

public static void main(String[] args) {

List<Process> processes = new ArrayList<>();

processes.add(new Process(1, 0, 5));

processes.add(new Process(2, 2, 3));

processes.add(new Process(3, 4, 2));

processes.add(new Process(4, 6, 4));

srtfScheduling(processes);

public static void srtfScheduling(List<Process> processes) {

int currentTime = 0;
int totalWaitingTime = 0;

int completedProcesses = 0;

PriorityQueue<Process> queue = new PriorityQueue<>(Comparator.comparingInt(p ->


p.remainingTime));

while (completedProcesses < processes.size()) {

for (Process process : processes) {

if (process.arrivalTime <= currentTime && !queue.contains(process)) {

queue.add(process);

if (!queue.isEmpty()) {

Process currentProcess = queue.poll();

System.out.println("Executing process " + currentProcess.id + " at time " + currentTime);

currentProcess.remainingTime--;

if (currentProcess.remainingTime == 0) {

completedProcesses++;

totalWaitingTime += currentTime - currentProcess.arrivalTime - currentProcess.burstTime + 1;

System.out.println("Process " + currentProcess.id + " completed at time " + (currentTime +


1));

} else {

System.out.println("Idle at time " + currentTime);

currentTime++;

}
System.out.println("Average waiting time: " + (double) totalWaitingTime / processes.size());

You might also like