It looks like when programming in Java we are not suppose to use Vectors anymore when threads are involved.
你需要理解为什么在大多数情况下使用Vector被认为是一件坏事.原因是:
>矢量在每个操作上同步.大多数上下文不需要细粒度同步,因此这是一个不必要的性能开销.
> Vector.elements()方法返回一个没有故障快速语义的枚举.
把它带回你的问题.替代方案取决于您的线程尝试执行的操作:
>如果用例根本不需要同步,请使用ArrayList或LinkedList.如果符合以下条件,您通常会使
>列表是线程限制的;即只有一个线程可以访问它.
>该列表需要粗粒度同步;即在执行一系列操作时的独占访问.在这种情况下,您通常会创建一个自定义类,其中包含未在自定义类API中公开的嵌入式(例如)ArrayList.
>如果用例需要细粒度同步,则Collections.synchronizedList包装器等效于Vector.或者,您可以坚持使用Vector并避免使用elements()操作.
> CopyOnWriteArrayList列表的优点是它的迭代器支持并发修改……在某种意义上.如果您的应用程序主要执行读取列表,它也会更好地扩展.读取操作根本不需要显式同步,通常只需要读取一次单个volatile.但另一方面,写操作会同步,并且比“普通”ArrayList要昂贵得多.
Vector和Collections.synchronizedList包装器的另一个问题是某些用例需要更粗略的同步;例如测试列表的大小并在单个同步操作中有条件地添加元素. Queue和Deque类提供更高级别的抽象来处理这种事情……对于涉及将工作从一个线程异步传递到另一个线程的用例.
最重要的是,没有一个通用的解决方案.您需要了解应用程序设计的并发特性,并相应地选择数据结构.
最后,如果您使用的是Java ME编程,则可能会遇到使用Vector的问题,具体取决于您所针对的J2ME配置文件.