Vector
sincroniza em cada operação individual. Isso quase nunca é o que você quer fazer.
Geralmente você deseja sincronizar toda uma sequência de operações. A sincronização de operações individuais é menos segura (se você iterar sobre uma Vector
, por exemplo, ainda precisará bloquear um bloqueio para evitar que outras pessoas alterem a coleção ao mesmo tempo, o que causaria um ConcurrentModificationException
no encadeamento de iteração), mas também mais lento ( por que fechar repetidamente uma fechadura quando uma vez será suficiente)?
Obviamente, ele também tem a sobrecarga de travamento, mesmo quando você não precisa.
Basicamente, é uma abordagem muito falha para sincronização na maioria das situações. Como o Sr. Brian Henk apontou, você pode decorar uma coleção usando as chamadas como Collections.synchronizedList
- o fato de Vector
combinar a implementação da coleção "array redimensionada" com o bit "sincronizar todas as operações" é outro exemplo de design inadequado; a abordagem de decoração oferece uma separação mais limpa das preocupações.
Quanto a um Stack
equivalente - eu iria olhar para Deque
/ ArrayDeque
para começar.