gpt4 book ai didi

java - 我的 LinkedBlockingQueue 实现是否需要同步?

转载 作者:行者123 更新时间:2023-12-02 07:12:54 26 4
gpt4 key购买 nike

首先,我使用搜索找到了n个与这个问题相关的主题。不幸的是,他们没有帮助我,所以这将是 n++ 主题:)

情况:我将有几个工作线程(同一类,只是许多重复项)(我们称其为 WT)和一个结果写入线程 (RT)。

WT 将向队列添加对象,RT 将获取它们。由于会有很多 WT,不会有任何内存问题(与最大队列大小无关)吗?这些操作会等待彼此完成吗?

此外,据我了解,BlockingQueue 非常慢,所以也许我应该在同步块(synchronized block)中保留它并使用普通队列?或者我应该使用 SynchronizedQueue 来考虑我自己?

最佳答案

LinkedBlockingQueue 旨在处理写入同一队列的多个线程。来自 documentation :

BlockingQueue implementations are thread-safe. All queuing methods achieve their effects atomically using internal locks or other forms of concurrency control. However, the bulk Collection operations addAll, containsAll, retainAll and removeAll are not necessarily performed atomically unless specified otherwise in an implementation.

因此,您非常安全(除非您希望批量操作是原子的)。

当然,如果线程 A 和线程 B 正在写入同一个队列,则 A 的项目相对于 B 的项目的顺序将是不确定的,除非您同步 A 和 B。

至于队列实现的选择,请选择最简单的完成工作的方法,然后进行分析。这将为您提供有关瓶颈位置的准确数据,因此您无需猜测。

关于java - 我的 LinkedBlockingQueue 实现是否需要同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15295506/

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