一尘不染

为什么Java Vector(和Stack)类被视为过时或过时的?

java vector stack 过时

为什么Java Vector(和Stack)类被视为过时或过时的?


阅读 874

收藏
2020-01-10

共1个答案

一尘不染

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

通常,你要同步整个操作序列。同步单个操作既不安全(Vector例如,如果你对进行迭代,则仍然需要锁,以避免其他人同时更改集合,这会导致ConcurrentModificationException迭代线程中的错误),但同步速度也较慢(为什么一次就够了就反复拿出锁)?

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

基本上,在大多数情况下,这是一种非常有缺陷的同步方法。正如Brian Henk先生所指出的那样,你可以使用以下调用来装饰集合:[Collections.synchronizedList](http://java.sun.com/javase/6/docs/api/java/util/Collections.html#synchronizedList(java.util.List))- Vector将“调整大小的数组”集合实现与“同步每个操作”位结合在一起的事实是不良设计的另一个例子;装饰方法使关注点更清晰地分离。

至于Stack等效项-我会先看Deque/ ArrayDeque。

2020-01-10