java - 为什么Java Vector类被认为过时或者不推荐使用的?

  显示原文与译文双语对照的内容

为什么Java矢量被认为是旧式类,过时或者过时?

使用并发时,它的使用是否有效?

如果我不想手动同步对象,只想使用thread-safe集合而不需要创建底层数组( 作为 CopyOnWriteArrayList )的新副本,那么使用 Vector 就可以了?

StackVector的子类,我该怎么使用它?

时间:

Vector 在每个单独的操作上同步。 这几乎不是你想要做的。

一般情况下,你需要同步一个整个序列 。 同时同步处理各个操作的没那么安全( 例如如果你在 Vector 上迭代,你仍然需要取出一个锁,以避免其他人同时更改集合,这将导致迭代线程中的ConcurrentModificationException ) 而且比较慢( 当一次足够的时候,为什么要反复取出一个锁)?

当然,它也有锁定的开销,即使你不需要。

基本上,在大多数情况下,这是一种非常有缺陷的同步方法。 就像MrSpandex指出的那样,你可以使用 Collections.synchronizedList 这样的调用来装饰一个集合。Vector 将"调整大小的数组"集合实现与"同步每个操作"bit结合起来是糟糕设计的另一个例子;装饰方法给出了更清晰的关注点分离。

对于 Stack 等价的- 我将查看 Deque/ArrayDeque 以开始。

...