Vous avez vraiment besoin de classer Java Vecteur du type de fil de sécurité. Javas Vecteur est sûr pour être utilisé à partir de plusieurs threads, car il utilise la synchronisation sur les méthodes. L'état ne sera pas endommagé.
Cependant, Java est le vecteur de l'utilité est limitée à partir de plusieurs threads sans synchronisation supplémentaire. Considérons, par exemple, le simple fait de lire un élément à partir d'un vecteur
Vector vector = getVector();
if ( vector.size() > 0 ) {
object first = vector.get(0);
}
Cette méthode ne sera pas corrompu l'état du vecteur, mais aussi il n'est pas correct. Rien n'empêche un autre thread de la mutation du vecteur entre l'instruction si un get() de l'appel. Ce code peut et va finalement échouer en raison d'une condition de course.
Ce type de synchronisation est seulement utile dans une poignée de scénarios, et il est certainement pas bon marché. Vous payez une malformation des prix pour la synchronisation, même si vous n'utilisez pas plusieurs threads.
.Net a choisi de ne pas payer ce prix par défaut pour un scénario d'une utilité limitée. Au lieu de cela, elle a choisi de mettre en œuvre un verrou Liste libre. Les auteurs sont responsables pour tout ajout de la synchronisation. C'est plus proche de C++de modèle de "ne payez que pour ce que vous utilisez"
Récemment, j'ai écrit quelques articles sur les dangers de l'utilisation des collections avec seulement synchronisation interne, tels que Java est le vecteur.
Référence Vecteur fil de sécurité: http://www.ibm.com/developerworks/java/library/j-jtp09263.html