import java.util.*; /** * En pulje af objekter. * Objekterne skal tilføjes til puljen udefra. */ public class ObjektpuljeKlientHaenger { private ArrayList ledige = new ArrayList(); /** * Læg et ledigt objekt ind i puljen. * Bruges både til at initialisere puljen lige efter dens oprettelse, * og løbende, når et fjernet objekt bliver ledigt igen. */ public synchronized void sætInd(Object obj) { ledige.add(obj); this.notify(); // væk eventuelle ventende tråde } /** * Tag et ledigt objekt ud af puljen. * Er der ikke flere objekter tilbage 'hænger' kaldet, indtil * et objekt bliver ledigt. */ public synchronized Object tagUd() { try { while (ledige.isEmpty()) // så længe der ikke er ledige objekter... { System.out.println("Ikke flere objekter i puljen, venter..."); this.wait(); // .... vent på at blive vækket } Object obj = ledige.remove(ledige.size()-1); // tag objekt return obj; } catch (InterruptedException e) { e.printStackTrace(); return null; } } }