Um z. B. eine synchronisierte Implementierung einer TreeMap zu erhalten,
müssen folgende Zeilen Code ausgeführt werden:
SortedMap sm;
sm = Collections.synchronizedSortedMap(new TreeMap());
// Die Aufrufe an sm sind nun synchronisiert
Die Methoden der Klasse Collections sind alle statisch, so dass sie direkt
über den Klassennamen aufgerufen werden können.
Die
erweiterte Funktionalität wird bei dieser Vorgehensweise durch so genannte Wrapper-Implementierungen
zur Verfügung gestellt. Für jedes Interface ist eine Wrapper-Implementierung sowohl
für die Synchronisation als auch für die unveränderbare Variante enthalten.
Beim Aufruf von synchronizedXXX() bzw. unmodifiableXXX()
wird zunächst ein Exemplar der passenden Wrapper-Implementierung erzeugt, das in einem
Datenelement einen Verweis auf das übergebene Original-Exemplar speichert (im obigen
Beispiel ein Exemplar der Klasse TreeMap). Die Wrapper-Implementierung wird
nun anschließend von synchronizedXXX() bzw. unmodifiableXXX()
zurückgeliefert. Beim Aufruf der Methoden stellt nun der Wrapper zunächst die
neue Funktionalität zur Verfügung (z. B. Synchronisation) und leitet danach den
Aufruf an die Original-Implementierung weiter.