为什么Java Vector(和Stack)类被视为过时或过时的?
Vector在每个单独的操作上同步。那几乎从来不是你想要做的。
通常,你要同步整个操作序列。同步单个操作既不安全(Vector例如,如果你对进行迭代,则仍然需要锁,以避免其他人同时更改集合,这会导致ConcurrentModificationException迭代线程中的错误),但同步速度也较慢(为什么一次就够了就反复拿出锁)?
ConcurrentModificationException
当然,即使你不需要时,它也具有锁定的开销。
基本上,在大多数情况下,这是一种非常有缺陷的同步方法。正如Brian Henk先生所指出的那样,你可以使用以下调用来装饰集合:[Collections.synchronizedList](http://java.sun.com/javase/6/docs/api/java/util/Collections.html#synchronizedList(java.util.List))- Vector将“调整大小的数组”集合实现与“同步每个操作”位结合在一起的事实是不良设计的另一个例子;装饰方法使关注点更清晰地分离。
[Collections.synchronizedList](http://java.sun.com/javase/6/docs/api/java/util/Collections.html#synchronizedList(java.util.List))- Vector
至于Stack等效项-我会先看Deque/ ArrayDeque。