java中除用什么代替,我可以用什么代替Java中的Vector?

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配置文件.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值