为什么Java向量被认为是遗留类,已经过时或被弃用?
使用并发时,它的使用是否有效?
如果不想手动同步对象,只想使用线程安全的集合,而不需要重新创建底层数组的副本(那样CopyOnWriteArrayList),那么使用它是否可行Vector?
怎么样Stack,这是Vector什么,应该用什么来代替它呢?
Vector同步每个单独的操作。这几乎从来不是你想要做的。
通常你想同步整个操作序列。同步单个操作不太安全(Vector例如,如果你遍历一个,例如,你仍然需要取出一个锁,以避免其他人同时改变集合,这将导致ConcurrentModificationException迭代线程),但也更慢为什么要重复一次锁就好了)?
当然,即使你不需要,它也有锁定的开销。
基本上,在大多数情况下,这是一个非常有缺陷的同步方法。正如Brian Henk先生指出的那样,您可以使用如下调用来装饰集合Collections.synchronizedList:Vector将“调整大小的数组”集合实现与“每个操作同步”位相结合的事实是设计不佳的另一个例子; 装饰方式让人更清楚的分离关注点。
至于Stack等价的 - 我会看Deque/ ArrayDeque开始。
Vector同步每个单独的操作。这几乎从来不是你想要做的。
通常你想同步整个操作序列。同步单个操作不太安全(Vector例如,如果你遍历一个,例如,你仍然需要取出一个锁,以避免其他人同时改变集合,这将导致ConcurrentModificationException迭代线程),但也更慢为什么要重复一次锁就好了)?
当然,即使你不需要,它也有锁定的开销。
基本上,在大多数情况下,这是一个非常有缺陷的同步方法。正如Brian Henk先生指出的那样,您可以使用如下调用来装饰集合Collections.synchronizedList:Vector将“调整大小的数组”集合实现与“每个操作同步”位相结合的事实是设计不佳的另一个例子; 装饰方式让人更清楚的分离关注点。
至于Stack等价的 - 我会看Deque/ ArrayDeque开始。