Select Git revision
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Driver.java 2.00 KiB
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);
}
}
}