为什么Java Vector类被认为是过时的或已被弃用的?

问题:

为什么Java Vector被认为是遗留类,过时或不推荐?
使用并发功能不是有效吗?
如果我不想手动同步对象,只想使用线程安全的集合,而不需要创建底层数组的新副本(如CopyOnWriteArrayList),那么使用Vector
StackVector的子类,应该如何使用?

回答:

 Vector在每个单独的操作上同步。这几乎从来不是你想做的。
一般来说,您要同步whole sequence操作。同步各个操作都不太安全(例如,如果迭代Vector,您仍然需要取出锁定,以避免任何人同时更改集合,这将导致迭代中的ConcurrentModificationException线程)还要慢些(为什么一旦重复出现一次就足够了)?
当然,即使不需要它也具有锁定的开销。
基本上,在大多数情况下,这是一种非常有缺陷的同步方法。正如布恩·亨克先生所指出的,您可以使用Collections.synchronizedList这样的调用来装饰一个集合 – Vector将“调整大小的数组”集合实现与“同步每个操作”位相结合的事实是另一个糟糕的设计示例;装饰方法使人们更加清楚地分离顾虑。
对于Stack等价物 – 我会看Deque ArrayDeque开始。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Why is Java Vector class considered obsolete or deprecated?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

84 + = 90