gpt4 book ai didi

java - Vector 与 SynchronizedList 性能

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:43 32 4
gpt4 key购买 nike

在阅读有关集合实现的 Oracle 教程时,我发现了以下句子:

If you need synchronization, a Vector will be slightly faster than an ArrayList synchronized with Collections.synchronizedList

来源:List Implementations

但是在寻找它们之间的区别时,很多人不鼓励使用Vector,当需要同步时应该用SynchronizedList代替。那么哪一方有权利被跟随呢?

最佳答案

当您使用 Collections.synchronizedList(new ArrayList<>()) 时您正在分离两个实现细节。很明显,如何将底层存储模型从“基于数组”更改为,例如“链接节点”,只需替换 new ArrayListnew LinkedList不改变 synchronized装饰。

声明Vector “会稍微快一点”似乎是基于这样一个事实,即它的使用不承担包装器和底层存储之间的委托(delegate),但是从中得出关于性能的陈述在当时甚至是值得怀疑的,当时 ArrayListsynchronizedList包装器被引入。

应该注意的是,当您真正关心由多个线程访问的列表的性能时,您将两者都不是这两种选择。通过使所有访问方法成为安全存储线程的想法 synchronized从一开始就有缺陷。每个涉及对列表的多次访问的操作,例如简单的构造,如 if(!list.contains(o)) list.add(o);或遍历列表,甚至是简单的 Collections.swap(list, i, j);需要额外的手动同步才能在多线程设置中正常工作。

如果你仔细想想,你会意识到现实生活中的应用程序的大多数操作都包含多次访问,因此需要小心的手动锁定,而且每个低级访问方法都同步的事实另外可以不仅会降低性能,它还是假装不存在的安全性的伪装。

关于java - Vector 与 SynchronizedList 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34556989/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com