From dc4f52f08c5ed769ddc84101c21b42485bdd08af Mon Sep 17 00:00:00 2001 From: Miska Sulander <mialsu@utu.fi> Date: Fri, 26 Nov 2021 14:25:12 +0200 Subject: [PATCH] excerise 2 ready --- .../threadrunner2/assignment/MyRunnable.java | 40 +++++++++++++++++++ .../Task2UsingExecutorDistributor.java | 21 ++++++++-- 2 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 src/main/java/fi/utu/tech/threadrunner2/assignment/MyRunnable.java diff --git a/src/main/java/fi/utu/tech/threadrunner2/assignment/MyRunnable.java b/src/main/java/fi/utu/tech/threadrunner2/assignment/MyRunnable.java new file mode 100644 index 0000000..c3dc611 --- /dev/null +++ b/src/main/java/fi/utu/tech/threadrunner2/assignment/MyRunnable.java @@ -0,0 +1,40 @@ +package fi.utu.tech.threadrunner2.assignment; + +import java.util.concurrent.BlockingQueue; +import fi.utu.tech.threadrunner2.mediator.ControlSet; +import fi.utu.tech.threadrunner2.mediator.Mediator; +import fi.utu.tech.threadrunner2.works.Work; + +public class MyRunnable implements Runnable{ + + private Mediator mediator; + private ControlSet control; + private BlockingQueue<Work> workList; + + MyRunnable(Mediator mediator, ControlSet control) { + this.mediator = mediator; + this.control = control; + } + + public void run() { + // register thread + mediator.registerThread(this.hashCode(), "Thread"); + mediator.setRunStatus("Created", this.hashCode()); + // Set thread status to running + mediator.setRunStatus("Running", this.hashCode()); + + // Run works from work list while works are present in work list + while (!((workList = mediator.getWorkSlice(control.getBlockSize())).isEmpty())) { + for( Work item : workList) { + mediator.setWorkStatus("Calculating", item); + item.work(); + mediator.setWorkStatus("Done", item); + mediator.increaseCalculated(this.hashCode()); + } + } + + // Set thread status to ended when worklist is empty + mediator.setRunStatus("Ended", this.hashCode()); + } + +} diff --git a/src/main/java/fi/utu/tech/threadrunner2/assignment/Task2UsingExecutorDistributor.java b/src/main/java/fi/utu/tech/threadrunner2/assignment/Task2UsingExecutorDistributor.java index 8800c0d..1d1ba43 100644 --- a/src/main/java/fi/utu/tech/threadrunner2/assignment/Task2UsingExecutorDistributor.java +++ b/src/main/java/fi/utu/tech/threadrunner2/assignment/Task2UsingExecutorDistributor.java @@ -2,16 +2,31 @@ package fi.utu.tech.threadrunner2.assignment; import fi.utu.tech.threadrunner2.mediator.ControlSet; import fi.utu.tech.threadrunner2.mediator.Mediator; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; public class Task2UsingExecutorDistributor implements Distributor { - + + private Mediator mediator; + private ControlSet control; public Task2UsingExecutorDistributor(Mediator mediator, ControlSet control) { - + this.mediator = mediator; + this.control = control; } public void execute() { - + + // Create ExecutorService + ExecutorService executor = Executors.newFixedThreadPool(control.getThreadCount()); + for (int i = 0; i<control.getThreadCount(); i++) { + // Create runnable and execute + MyRunnable worker = new MyRunnable(mediator, control); + executor.execute(worker); + } + + // Shut down executor to conserve memory + executor.shutdown(); } } -- GitLab