Vector
se sincroniza en cada operación individual. Eso casi nunca es lo que quieres hacer.
Generalmente desea sincronizar una secuencia completa de operaciones. Sincronizar operaciones individuales es menos seguro (si itera sobre Vector
, por ejemplo, aún necesita quitar un bloqueo para evitar que alguien más cambie la colección al mismo tiempo, lo que provocaría un ConcurrentModificationException
en el hilo iterativo) pero también más lento ( ¿Por qué sacar una cerradura repetidamente cuando una vez será suficiente?
Por supuesto, también tiene la sobrecarga de bloqueo incluso cuando no es necesario.
Básicamente, es un enfoque muy defectuoso para la sincronización en la mayoría de las situaciones. Como señaló el Sr. Brian Henk , puede decorar una colección usando las llamadas tales como Collections.synchronizedList
: el hecho de que Vector
combina la implementación de la colección "matriz redimensionada" con el bit "sincronizar cada operación" es otro ejemplo de diseño deficiente; El enfoque de la decoración da una separación más limpia de las preocupaciones.
En cuanto a un Stack
equivalente, miraría Deque
/ ArrayDeque
para comenzar.