gpt4 book ai didi

Java多线程: cheap operation to add object to List/Queue/Set

转载 作者:行者123 更新时间:2023-11-30 02:05:07 24 4
gpt4 key购买 nike

所以基本上我需要一种方法将对象(我们称之为元素)添加到列表/队列/集合或类似的多线程中。由于我需要添加很多元素(不确定有多少,但相信我),所以操作应该很便宜。没有必要删除它们。将每个元素添加到列表中也是极其重要的。

基本上我正在寻找这个:

  • 线程安全
  • 便宜的添加功能
  • 不可比较/未排序
  • 需要添加每个元素

由于 CopyOnWriteArrayList 在我的情况下听起来相当昂贵,因此我认为这不是一个选择。

不幸的是,我无法使元素具有可比性,因此 ConcurrentSkipListSet 不是一个选项。

Collections.synchronizedList() 听起来也太昂贵了。

目前我正在考虑使用 ConcurrentLinkedQueue 或只是同步 add 方法,如下所示:

private synchronized void add(Element elem){
elements.add(elem);
}

最佳答案

一般来说,您应该坚持使用 JDK 库中的方法和类;它们往往会进行相当优化,并且会在未来的版本中出现,这将导致您的代码无需您的努力即可更新。事实上,这是 Joshua Bloch 的《Effective Java》中的一项。

遵守该规则,因为您似乎并不真正关心您真正获得的集合类型(“List/Queue/Set”在你的问题中),你为什么不这样做

Collection<YourData> synced = Collections.synchronizedCollection(new LinkedList<>());

LinkedList 优化添加元素(与 ArrayList 不同,后者会在容量耗尽时复制底层数组),而 synchronizedCollection 则可以synchronized 包装(如果您查看代码,它的实现完全按照您的建议)。 synchronizedList 顺便说一句也是如此。

关于Java多线程: cheap operation to add object to List/Queue/Set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51609587/

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