From 8c24d0345a599567ef6eff7685d98952d879965b Mon Sep 17 00:00:00 2001 From: Tanmay Date: Thu, 13 Oct 2022 15:21:59 +0100 Subject: [PATCH] Adds code for threads. --- os/code/os/src/main/java/com/scaler/App.java | 20 ++++++++++++++----- .../src/main/java/com/scaler/TextPrinter.java | 14 +++++++++++++ .../scheduling/FirstComeFirstServe.java | 12 +++++++++++ .../scheduling/models/IncomingProcess.java | 2 -- 4 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 os/code/os/src/main/java/com/scaler/TextPrinter.java diff --git a/os/code/os/src/main/java/com/scaler/App.java b/os/code/os/src/main/java/com/scaler/App.java index 6a73e3c..c5143e6 100644 --- a/os/code/os/src/main/java/com/scaler/App.java +++ b/os/code/os/src/main/java/com/scaler/App.java @@ -4,10 +4,20 @@ package com.scaler; * Hello world! * */ -public class App -{ - public static void main( String[] args ) - { - System.out.println( "Hello World!" ); +public class App { + + public static void print() { + System.out.println("Hello World! printed by: " + Thread.currentThread().getName()); + } + + public static void main(String[] args) { + + print(); + + for (int i = 0; i < 10; i++) { + TextPrinter textPrinter = new TextPrinter(String.valueOf(i)); + Thread thread = new Thread(textPrinter); + thread.start(); + } } } diff --git a/os/code/os/src/main/java/com/scaler/TextPrinter.java b/os/code/os/src/main/java/com/scaler/TextPrinter.java new file mode 100644 index 0000000..cc35dd9 --- /dev/null +++ b/os/code/os/src/main/java/com/scaler/TextPrinter.java @@ -0,0 +1,14 @@ +package com.scaler; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public class TextPrinter implements Runnable { + + private String text; + + @Override + public void run() { + System.out.println(text + " printed by: " + Thread.currentThread().getName()); + } +} diff --git a/os/code/os/src/main/java/com/scaler/scheduling/FirstComeFirstServe.java b/os/code/os/src/main/java/com/scaler/scheduling/FirstComeFirstServe.java index 248b0e7..f65a1ec 100644 --- a/os/code/os/src/main/java/com/scaler/scheduling/FirstComeFirstServe.java +++ b/os/code/os/src/main/java/com/scaler/scheduling/FirstComeFirstServe.java @@ -10,27 +10,39 @@ import com.scaler.scheduling.models.ScheduledProcess; public class FirstComeFirstServe { public List schedule(List processes) { + + // Get a sorted list of processes Queue queue = prepareQueue(processes); List scheduledProcesses = new LinkedList<>(); int time = 0; int index = 0; + + // Check if there are any processes in the queue while (!queue.isEmpty()) { IncomingProcess process = queue.poll(); + + // Increment elapsed time by the burst time of the process time += process.getBurstTime(); index += 1; process.setCompletedAt(time); + + // Add the process to the list of scheduled processes scheduledProcesses.add(new ScheduledProcess(index, process)); } return scheduledProcesses; } + // When ever we get a new process, we add it to the queue private Queue prepareQueue(List processes) { + // Simulate a queue using a linked list Queue queue = new LinkedList<>(); List sortedProcesses = new LinkedList<>(processes); + + // Sort the processes by arrival time to simulate FCFS sortedProcesses.sort((p1, p2) -> p1.getArrivalTime() - p2.getArrivalTime()); for (IncomingProcess process : sortedProcesses) { diff --git a/os/code/os/src/main/java/com/scaler/scheduling/models/IncomingProcess.java b/os/code/os/src/main/java/com/scaler/scheduling/models/IncomingProcess.java index b9a8ab7..ef2d5ae 100644 --- a/os/code/os/src/main/java/com/scaler/scheduling/models/IncomingProcess.java +++ b/os/code/os/src/main/java/com/scaler/scheduling/models/IncomingProcess.java @@ -1,8 +1,6 @@ package com.scaler.scheduling.models; -import lombok.AllArgsConstructor; import lombok.Getter; -import lombok.RequiredArgsConstructor; import lombok.Setter; @Getter