import java.util.LinkedList; public class P2_Printer{ private int[] time = {0}; //Really hacky solution, but seems easier than wrapping in a custom object. private char printerMode = 'M'; private LinkedList printerHeadsWaiting = new LinkedList(); private P2_PrinterHead p1 = new P2_PrinterHead(1); private P2_PrinterHead p2 = new P2_PrinterHead(2); private P2_PrinterHead p3 = new P2_PrinterHead(3); public P2_Printer() { //Nothing to set up. printerHeadsWaiting.add(p1); printerHeadsWaiting.add(p2); printerHeadsWaiting.add(p3); } public synchronized P2_PrinterHead requestHead() { while(printerHeadsWaiting.size()==0) { //If there isn't a head available, pause for a moment and check again. try { Thread.sleep(0); } catch(Exception e) { //Don't caare } } return printerHeadsWaiting.removeFirst(); } public boolean requestPrint(P2_Jobs jobInput, P2_PrinterHead printHeadToUse) { printHeadToUse.print(jobInput, time); printerHeadsWaiting.add(printHeadToUse); return true; } }