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 0000000000000000000000000000000000000000..c3dc61114790b0b7d5ff5b29d643d21d2a2869c2 --- /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 8800c0d0170755ce323510056aec0696e0bc250a..1d1ba43237b368beb9badc794661a4c05de2f53b 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(); } }