From d9512df57b9cf0a82665add95777dfe23260299f Mon Sep 17 00:00:00 2001 From: TienNM99 Date: Sun, 10 Sep 2023 16:27:23 +0700 Subject: [PATCH] [Scheduler Pattern] (Fix) check style problems --- .../scheduler/FirstComeFirstServedScheduler.java | 5 ++++- .../com/iluwatar/scheduler/PriorityScheduler.java | 8 ++++++-- .../com/iluwatar/scheduler/RoundRobinScheduler.java | 12 ++++++++++-- .../ShortestRemainingTimeFirstScheduler.java | 13 +++++++++---- .../main/java/com/iluwatar/scheduler/Simulator.java | 4 ++++ .../src/main/java/com/iluwatar/scheduler/Task.java | 10 +++++++++- .../java/com/iluwatar/scheduler/TaskScheduler.java | 6 +++--- 7 files changed, 45 insertions(+), 13 deletions(-) diff --git a/scheduler/src/main/java/com/iluwatar/scheduler/FirstComeFirstServedScheduler.java b/scheduler/src/main/java/com/iluwatar/scheduler/FirstComeFirstServedScheduler.java index b7a1d9a28..d23d94b28 100644 --- a/scheduler/src/main/java/com/iluwatar/scheduler/FirstComeFirstServedScheduler.java +++ b/scheduler/src/main/java/com/iluwatar/scheduler/FirstComeFirstServedScheduler.java @@ -5,6 +5,7 @@ import java.beans.PropertyChangeListener; import java.util.LinkedList; import java.util.Queue; +/**Tasks are scheduled in the order they arrive. */ public class FirstComeFirstServedScheduler implements TaskScheduler, PropertyChangeListener { private final Queue taskQueue = new LinkedList<>(); @@ -17,7 +18,9 @@ public class FirstComeFirstServedScheduler implements TaskScheduler, PropertyCha @Override public void update(int deltaTime) { Task task = taskQueue.peek(); - if (task == null) return; + if (task == null) { + return; + } task.execute(deltaTime); } diff --git a/scheduler/src/main/java/com/iluwatar/scheduler/PriorityScheduler.java b/scheduler/src/main/java/com/iluwatar/scheduler/PriorityScheduler.java index 6d084350b..24a48b215 100644 --- a/scheduler/src/main/java/com/iluwatar/scheduler/PriorityScheduler.java +++ b/scheduler/src/main/java/com/iluwatar/scheduler/PriorityScheduler.java @@ -5,12 +5,14 @@ import java.beans.PropertyChangeListener; import java.util.PriorityQueue; import java.util.Queue; +/** Tasks with higher priority values are executed before tasks with lower priority values. */ public class PriorityScheduler implements TaskScheduler, PropertyChangeListener { private final Queue taskQueue = new PriorityQueue<>( (task1, task2) -> { - if (task2.getPriority() != task1.getPriority()) + if (task2.getPriority() != task1.getPriority()) { return task2.getPriority() - task1.getPriority(); + } return task1.getId() - task2.getId(); // lower id (earlier task) has higher priority }); @@ -23,7 +25,9 @@ public class PriorityScheduler implements TaskScheduler, PropertyChangeListener @Override public void update(int deltaTime) { Task task = taskQueue.peek(); - if (task == null) return; + if (task == null) { + return; + } task.execute(deltaTime); } diff --git a/scheduler/src/main/java/com/iluwatar/scheduler/RoundRobinScheduler.java b/scheduler/src/main/java/com/iluwatar/scheduler/RoundRobinScheduler.java index 20cd819ca..b46d95274 100644 --- a/scheduler/src/main/java/com/iluwatar/scheduler/RoundRobinScheduler.java +++ b/scheduler/src/main/java/com/iluwatar/scheduler/RoundRobinScheduler.java @@ -3,6 +3,10 @@ package com.iluwatar.scheduler; import java.util.LinkedList; import java.util.Queue; +/** + * Round Robin technique. Tasks are executed in a cyclic order, with each task getting a fixed time + * quantum for execution. + */ public class RoundRobinScheduler implements TaskScheduler { private final Queue taskQueue = new LinkedList<>(); @@ -14,8 +18,12 @@ public class RoundRobinScheduler implements TaskScheduler { @Override public void update(int deltaTime) { Task task = taskQueue.poll(); - if (task == null) return; + if (task == null) { + return; + } task.execute(deltaTime); - if (!task.isComplete()) taskQueue.add(task); + if (!task.isComplete()) { + taskQueue.add(task); + } } } diff --git a/scheduler/src/main/java/com/iluwatar/scheduler/ShortestRemainingTimeFirstScheduler.java b/scheduler/src/main/java/com/iluwatar/scheduler/ShortestRemainingTimeFirstScheduler.java index fdfd55280..12f0ef51b 100644 --- a/scheduler/src/main/java/com/iluwatar/scheduler/ShortestRemainingTimeFirstScheduler.java +++ b/scheduler/src/main/java/com/iluwatar/scheduler/ShortestRemainingTimeFirstScheduler.java @@ -1,15 +1,16 @@ package com.iluwatar.scheduler; -import java.util.Comparator; import java.util.PriorityQueue; import java.util.Queue; +/** The task with the shortest remaining execution time is given priority. */ public class ShortestRemainingTimeFirstScheduler implements TaskScheduler { private final Queue taskQueue = new PriorityQueue<>( (task1, task2) -> { - if (task2.getRemainingTime() != task1.getRemainingTime()) + if (task2.getRemainingTime() != task1.getRemainingTime()) { return task1.getRemainingTime() - task2.getRemainingTime(); + } return task1.getId() - task2.getId(); // lower id (earlier task) has higher priority }); @@ -21,8 +22,12 @@ public class ShortestRemainingTimeFirstScheduler implements TaskScheduler { @Override public void update(int deltaTime) { Task task = taskQueue.poll(); - if (task == null) return; + if (task == null) { + return; + } task.execute(deltaTime); - if (!task.isComplete()) taskQueue.add(task); + if (!task.isComplete()) { + taskQueue.add(task); + } } } diff --git a/scheduler/src/main/java/com/iluwatar/scheduler/Simulator.java b/scheduler/src/main/java/com/iluwatar/scheduler/Simulator.java index 87f683095..129d8e7db 100644 --- a/scheduler/src/main/java/com/iluwatar/scheduler/Simulator.java +++ b/scheduler/src/main/java/com/iluwatar/scheduler/Simulator.java @@ -20,6 +20,10 @@ public class Simulator implements PropertyChangeListener { private final LinkedHashMap taskCompletedOrder = new LinkedHashMap<>(); private int elapsedTime = 0; + /** + * Simulate scheduler schedule tasks, then return a LinkedHashMap present the completed order of + * tasks, which map task id to the time it completed. + */ public LinkedHashMap simulate() { while (elapsedTime < simulateTime) { if (tasks.containsKey(elapsedTime)) { diff --git a/scheduler/src/main/java/com/iluwatar/scheduler/Task.java b/scheduler/src/main/java/com/iluwatar/scheduler/Task.java index fcf8e7d73..8d80b23b7 100644 --- a/scheduler/src/main/java/com/iluwatar/scheduler/Task.java +++ b/scheduler/src/main/java/com/iluwatar/scheduler/Task.java @@ -4,6 +4,7 @@ import java.beans.PropertyChangeSupport; import lombok.Getter; import lombok.RequiredArgsConstructor; +/** Task that need to be scheduled. */ @Getter @RequiredArgsConstructor public class Task { @@ -15,17 +16,24 @@ public class Task { /** The priority of the task. The higher the number, the higher the priority. */ private int priority = 0; + /** The time that the task run. */ private int elapsedTime = 0; + + /** Whether the task is completed. */ private boolean complete = false; + /** Create a task with id, total execution time and priority. */ public Task(int id, int totalExecutionTime, int priority) { this.id = id; this.totalExecutionTime = totalExecutionTime; this.priority = priority; } + /** Execute the task for a given number of seconds. */ public void execute(int seconds) { - if (complete) throw new IllegalStateException("Task already completed"); + if (complete) { + throw new IllegalStateException("Task already completed"); + } elapsedTime += seconds; diff --git a/scheduler/src/main/java/com/iluwatar/scheduler/TaskScheduler.java b/scheduler/src/main/java/com/iluwatar/scheduler/TaskScheduler.java index f353d56fb..94078919d 100644 --- a/scheduler/src/main/java/com/iluwatar/scheduler/TaskScheduler.java +++ b/scheduler/src/main/java/com/iluwatar/scheduler/TaskScheduler.java @@ -1,10 +1,10 @@ package com.iluwatar.scheduler; - +/** The scheduler is responsible for scheduling tasks. */ public interface TaskScheduler { - /** Add task to the scheduler */ + /** Add task to the scheduler. */ void scheduleTask(Task task); - /** Update to execute scheduled tasks */ + /** Update to execute scheduled tasks. */ void update(int deltaTime); }