Skip to content
Snippets Groups Projects
Select Git revision
  • main
1 result

README.md

Blame
  • 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);
    		}
    	}
    	
    	
    }