//simuleren van klantenrij in supermarkt // klant komt toe, wacht en wordt bediend class Winkel_Mertens //de klasse waar main in zit zelfde als bestandsnaam { public static void main (String args[]) { WinkelSynchronized sharedObject= new WinkelSynchronized();// object aanmaken KassaInteger kassa = new KassaInteger (sharedObject); KlantInteger klant = new KlantInteger (sharedObject); kassa.start();//thread kassa starten klant.start();//thread klant starten } } class KassaInteger extends Thread//producer { private WinkelSynchronized sharedObject; public KassaInteger(WinkelSynchronized shared) { sharedObject = shared;//de waarde die meegegeven worden in de hierboven WinkelSynchronized aangemaakt stoppen } public void run() { while(true)//omdat er geen array is dus zonder loopken { try { sharedObject.WachtenOpKlant();//kassa moet wachten op klant sleep(1000);//om de 2 minuten nieuwe klant, normaal dus 120000 ipv 1000 } catch (Exception e) {} } } } class KlantInteger extends Thread //consumer { private WinkelSynchronized sharedObject; public KlantInteger(WinkelSynchronized shared) { sharedObject = shared;//idem als bij kassaInteger } public void run() { while(true)//omdat er geen array is dus zonder loopken { try { sharedObject.WachtenOpKassa();//klant moet wachten op vrije kassa } catch (Exception e){} } } } class WinkelSynchronized { private boolean klantVerwerkt=false;//standaard op false zetten public synchronized void WachtenOpKassa()//als kassa dus bezet is { while (klantVerwerkt)//hier is jet false=>dus klant is nog ni gedaan, hij is de volgende klant { try { wait(); } catch (Exception e){} } System.err.println("Klant arriveert"); klantVerwerkt= true; notify(); } public synchronized void WachtenOpKlant() { while (!klantVerwerkt)//hier is het true => overgaan naar klant { try { wait(); } catch (Exception e){} } System.err.println("Volgende klant AUB"); klantVerwerkt = false; notify(); } }