Vector
synchronisiert sich bei jedem einzelnen Vorgang. Das ist fast nie das, was Sie tun wollen.
Im Allgemeinen möchten Sie eine gesamte Sequenz von Operationen. Die Synchronisierung einzelner Operationen ist sowohl weniger sicher (wenn Sie über eine Vector
müssen Sie beispielsweise eine Sperre aufheben, um zu verhindern, dass andere Personen die Sammlung gleichzeitig ändern, was zu einer ConcurrentModificationException
im iterierenden Thread), aber auch langsamer (warum sollte man eine Sperre wiederholt aufheben, wenn es auch einmal reicht)?
Natürlich hat es auch den Nachteil, dass man auch dann sperren kann, wenn man es nicht braucht.
Im Grunde genommen ist dies in den meisten Situationen ein sehr fehlerhafter Ansatz für die Synchronisierung. Wie Herr Brian Henk darauf hingewiesen, können Sie eine Sammlung mit Aufrufen wie Collections.synchronizedList
- die Tatsache, dass Vector
kombiniert sowohl die "resized array"-Sammlungsimplementierung mit dem "synchronize every operation"-Bit ist ein weiteres Beispiel für schlechtes Design; der Dekorationsansatz bietet eine sauberere Trennung der Anliegen.
Wie bei einem Stack
Äquivalent - ich würde mich umsehen Deque
/ ArrayDeque
um damit zu beginnen.