public class Zonemarine { public final int NUM_PortS; public final int NUM_Bateau; private Bateau[] lift; /** * numPorts -- nombre de port * numBateaus -- nombre d'bateau * BateauCapacity -- capacite de bateau * servicePortMS -- temps d'arręt dans chaque port */ public Zonemarine(int numPorts, int numBateau, int BateauCapacity, int servicePortMS, int travelTimeMS) { NUM_PortS = numPorts; NUM_Bateau = numBateau; lift = new Bateau[numBateau]; for (int liftNum = 0; liftNum < numBateau; liftNum++) { lift[liftNum] = new Bateau("Bateau "+liftNum, NUM_PortS, liftNum % numPorts, BateauCapacity, this, servicePortMS, travelTimeMS); } } public void startBateau(){ for (int liftNum = 0; liftNum < NUM_Bateau; liftNum++) { lift[liftNum].start(); } } public void stopBateau(){ for (int liftNum = 0; liftNum < NUM_Bateau; liftNum++) { lift[liftNum].stopBateau(); } } public synchronized void tellAt() { notifyAll(); } public synchronized Bateau callBateau(int VehiculePort, boolean goingUp){ while (true) { for (int liftNum = 0; liftNum < NUM_Bateau; liftNum++) { if(lift[liftNum].getCurrentPort() == VehiculePort && lift[liftNum].isGoingUp() == goingUp) { return lift[liftNum]; } } try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } public synchronized void waitForBateauToCome() { try{ wait(); } catch (InterruptedException e) { e.printStackTrace(); } } }