diff --git a/src/main/java/fi/utu/tech/threadrunner2/assignment/Driver.java b/src/main/java/fi/utu/tech/threadrunner2/assignment/Driver.java new file mode 100644 index 0000000000000000000000000000000000000000..a8c2522368e6ffa9c998f89a0f0509acfdd5f91e --- /dev/null +++ b/src/main/java/fi/utu/tech/threadrunner2/assignment/Driver.java @@ -0,0 +1,67 @@ +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 Driver extends Task1UsingThreadDistributor implements Runnable { + private Mediator mediator; + private Thread[] saikeet; + private BlockingQueue<Work> workList; + private ControlSet control; + + public Driver(Thread[] saikeet, ControlSet control, Mediator mediator, BlockingQueue<Work> workList) { + this.saikeet=saikeet; + this.control=control; + this.mediator=mediator; + this.workList=workList; + for(Thread saie : saikeet) { + mediator.registerThread(saie.hashCode(), "Thread"); + } + } + + public void aja() { + int maara= control.getBlockSize(); + int x=0; + for(Thread saie : saikeet) { + mediator.setRunStatus("Running", saie.hashCode()); + for( Work item : mediator.getWorkSlice(maara)) { + mediator.setWorkStatus("Calculating", item); + item.work(); + mediator.setWorkStatus("Done", item); + mediator.increaseCalculated(saie.hashCode()); + + } + + } + } + public void laske() {//pystyttäisiinkö vaan while notifyAll metodeilla + //mediator.registerThread(this.hashCode(), "Jotain1"); + mediator.setRunStatus("Running", this.hashCode()); + int maara = control.getBlockSize(); + workList = mediator.getWorkSlice(maara); //antaa listasta yhden työn. Tämä täytyy antaa tehtäväksi jollekin! + for( Work item : workList) { + mediator.setWorkStatus("Calculating", item); + item.work(); + mediator.setWorkStatus("Done", item); + mediator.increaseCalculated(this.hashCode()); + } + mediator.setRunStatus("Ended", this.hashCode()); + } + public void cordinate() { + int myPriority= myThread.getPriority();//Joku mättää + for(Thread saie : saikeet) { + saie.setPriority(myPriority-1); + } + while((!((workList = mediator.getWorkSlice(control.getBlockSize())).isEmpty()))) { + for(Thread saie : saikeet) { + saie.laske(); + } + sleep(100); + } + } + + +} diff --git a/src/main/java/fi/utu/tech/threadrunner2/assignment/Saie.java b/src/main/java/fi/utu/tech/threadrunner2/assignment/Saie.java new file mode 100644 index 0000000000000000000000000000000000000000..f3d53c5f7b99442457bb64ef5a9fa17dbf123760 --- /dev/null +++ b/src/main/java/fi/utu/tech/threadrunner2/assignment/Saie.java @@ -0,0 +1,42 @@ +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 Saie extends Thread implements Runnable,Distributor { + private Mediator mediator; + private Thread[] saikeet; + private BlockingQueue<Work> workList; + private ControlSet control; + private Integer hash; + + public Saie(Mediator mediator, ControlSet control) {//konstruktori + this.mediator=mediator; + this.control=control; + + + } + public void execute() { + this.start(); + } + public void run() {//Tarvitaan tehtävät työt listassa ja + + for(Work item : mediator.getWorkSlice(control.getBlockSize())) { + mediator.setWorkStatus("Running", item); + item.work(); + mediator.setWorkStatus("Done", item); + mediator.increaseCalculated(this.hashCode()); + + } + + + } +public Integer annaHash() { + return this.hashCode(); +} + + +}