2010-10-11 4 views
6

Je sais que la classe Vector est thread-safe pour ajouter et supprimer des éléments [reference].La sérialisation de java.util.Vector est-elle sûre pour les threads?

Si je sérialise un vecteur en utilisant un objet ObjectOutputStream, suis-je sûr d'avoir un état cohérent (et non corrompu) quand je le désérialise même si d'autres threads ajoutent et suppriment des objets lors de la sérialisation?

+1

Notez que bien que les opérations d'ajout/suppression individuelles soient synchronisées, vous ne pouvez pas parcourir un vecteur alors que d'autres threads ajoutent/suppriment (sans ajouter votre propre verrouillage) voir http://stackoverflow.com/questions/1386275/why -java-vector-class-is-consider-obsolete-or-deprecated –

+0

C'est bon à garder à l'esprit. –

Répondre

7

La méthode writeObject() est synchronisée. Mais il n'y a rien dans le Javadoc qui le garantit, à moins que cela ne soit implicite dans l'énoncé «Le vecteur est synchronisé».

Notez que la méthode readObject() n'a pas besoin d'être synchronisée, car l'objet n'est accessible à personne jusqu'à ce que readObject() renvoie.

+0

Tant qu'il est implémenté de manière thread-safe à l'heure actuelle, je peux accepter à mes fins que l'instruction dans le Javadoc est quelque peu vague. –

Questions connexes