2010-10-11 1 views
6

Ich weiß, dass die Vector-Klasse threadsicher für das Hinzufügen und Entfernen von Elementen ist [reference].Ist java.util.Vector Serialisierung Thread-sicher?

Wenn ich einen Vector unter Verwendung eines ObjectOutputStream serialisiert, garantiere ich einen konsistenten (und nicht korrupten) Zustand, wenn ich ihn deserialisiere, selbst wenn andere Threads während der Seralisierung Objekte hinzufügen und entfernen.

+1

Beachten Sie, dass einzelne Add/Remove-Vorgänge zwar synchronisiert werden, Sie jedoch nicht durch einen Vektor iterieren können, während andere Threads hinzugefügt/entfernt werden (ohne eigene Sperren hinzuzufügen), siehe http://stackoverflow.com/questions/1386275/why -java-vector-class-is-advanced-obsolete-or-deprecated –

+0

Das ist gut zu beachten. –

Antwort

7

Die Methode writeObject() wird synchronisiert. Aber es gibt nichts im Javadoc, das das garantiert, es sei denn, es wird durch die Aussage "Vektor ist synchronisiert" angedeutet.

Beachten Sie, dass die readObject() -Methode nicht synchronisiert werden muss, da das Objekt für niemanden zugänglich ist, bis readObject() zurückkehrt.

+0

Solange es derzeit threadsicher implementiert ist, kann ich für meine Zwecke akzeptieren, dass die Aussage im Javadoc etwas vage ist. –