Java Reference
In-Depth Information
eines Objektpools bezogen werden, so dass es keine konkurrierenden Alternativen
geben kann.
Um mehrere nebenläufige Clients gleichzeitig durch einen Objektpool bedienen zu
können, müssen die kritischen Abschnitte der Objektanforderung und Objektrückgabe
des Objektpools threadsicher ausgeführt werden. Threadsicher bedeutet, dass der
Objektpool auch bei Vorhandensein mehrerer Threads als Clients immer in einem
gültigen Zustand ist.
Ist die Kapazität des Pools erschöpft, so kann der Objektpool je nach Strategie ein
neues Objekt erzeugen, einen Client warten lassen, bis wieder ein zurückgegebenes
und "gereinigtes" Objekt zur Verfügung steht, oder aber dem Client die Entscheidung
bei einem ihm mitgeteilten Engpass überlassen.
Bei der Beschreibung des Musters wird im Folgenden davon ausgegangen, dass ein
Client nur ein einziges Objekt zur gleichen Zeit benötigt. Zur Anforderung eines
einzelnen Objekts wird eine Methode gibObjekt() vom Objektpool zur Verfügung
gestellt. Gibt es Client-Threads, die nicht nur ein einziges, sondern mehrere Objekte
des Objektpools gleichzeitig verwenden wollen, und ist die Zahl der verfügbaren Ob-
jekte im Objektpool beschränkt, kann es durchaus vorkommen, dass die Objekte an-
fordernden Threads aufeinander warten müssen und sich damit gegenseitig blockie-
ren. Zur Lösung dieses Problems müsste der Objektpool Methoden zur Verfügung stel-
len, mit denen mehrere Objekte gleichzeitig angefordert werden können.
4.21.3.1 Klassendiagramm
Das folgende Klassendiagramm stellt den Objektpool, den Client und die wiederver-
wendbare Klasse der Pool-Objekte dar:
« use »
Client
Objektpool
- Objektpool()
+ gibPoolinstanz() : Objektpool
+ gibObjekt() : WiederverwendbareKlasse {guarded}
+ objektZurueckgeben
(o : WiederverwendbareKlasse) {guarded}
« use »
*
Wiederverwendbare-
Klasse
Bild 4-64 Klassendiagramm des Objektpool-Musters
Die Klasse Objektpool ist als Singleton (siehe Kapitel 4.20) ausgelegt. Zur Realisie-
rung des Entwurfsmusters Singleton wird die Klassenmethode gibPoolinstanz()
zur Verfügung gestellt und der Konstruktor als private deklariert.
 
Search WWH ::




Custom Search