- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,我使用搜索找到了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 bulkCollection
operationsaddAll
,containsAll
,retainAll
andremoveAll
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/
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
我使用 LinkedBlockingQueue 为我的应用程序进行隐式同步,但如果我使用 queue.take() 或 queue.poll() ,前几个元素总是以某种方式从队列中获取后丢失。我已经检
我正在使用 LinkedBlockingQueue 在线程之间共享一些对象。问题是这个队列中可能有一些重复项。我尝试过这个解决方案: SortedSet set = new TreeSet(new M
如果我运行以下程序,JVM 在执行后不会终止。但是,如果我取消代码中 (//newFixedThreadPool.execute(new Producer3());) 行的注释,程序将在执行后终止。我
我有一个 LinkedBlockingQueue,我想检查队列中的元素是否按一定顺序排列,而不删除元素。我希望有一种方法可以用来查看队列中的特定位置。例如,queue.peekSpot(0) 将返回头
我正在制作一个WordCounter,它有几个线程计算不同文件中的单词。除了一个小问题,我已经把一切都搞定了。 我无法找出等待线程完成的正确方法。如果我设置 Thread.sleep 等待一小段时间,
我想知道为什么不 LinkedBlockingQueue如果我们将底层数据结构更改为像 java.util.LinkedList 这样的非线程安全列表,是否可以工作?当我尝试时,我得到一个 NoSuc
我创建了一个类来计算同一目录中给定文件中的单词数。由于文件非常大,我决定使用多线程来实现多个文件的计数。 当按照下面指定的方式运行 DriverClass 时,它会卡在线程一。我究竟做错了什么?当我迭
我有一个非常基本的线程池代码。它调用位于 linkedblockingqueue 中的工作对象池。该代码只是通过回收工作对象来打印出输入数据。 我发现与以下内容一致的死锁/卡住: public cla
我的情况是单个生产者和单个消费者处理对象队列。队列可能为空有两种情况: 消费者处理对象的速度比生产者生成新对象的速度快(生产者在生成对象之前使用 I/O)。 生产者已完成对象的生成。 如果队列为空,我
我有 3 个线程:2 个消费者,ConsumerA 和 ConsumerB,以及一个 Producer。 我还有一个LinkedBlockingQueue队列 在 t=1 时:ConsumerA 调用
我有一个类似生产者-消费者的场景。 A 类生成 E 类型的对象。我必须将它保存在 A 类的静态数据结构中,因为消费者逻辑应该在 B 类中处理,它没有引用 A 的对象。LinkedBlockingQue
我看着 JDK LinkedBlockingQueue 类,迷路了。 public void put(E e) throws InterruptedException { if (e == n
我的问题涉及使用同步来订购我用于电梯程序的 LinkedBlockingQueue。 在该程序中,电梯应该尽可能高效地运行:从一楼到十楼的电梯将在上升过程中响应额外的停靠,即使这些停靠是在最初的 10
我需要一个 LinkedBlockingQueue 但我正在将原语传递给它。我添加到队列的数据速率约为每秒 4 毫秒或 256 个数据点。我遇到的问题是数据在开始时立即开始延迟,但随着时间的推移,JI
我在两个不同的线程之间使用 LinkedBlockingQueue。一个线程通过add添加数据,而另一个线程通过take接收数据。 我的问题是,我是否需要同步访问 add 和 take。 Linked
ArrayBlockingQueue public class ArrayBlockingQueue extends AbstractQueue implements BlockingQueu
如果尝试向阻塞队列添加超过阻塞队列剩余大小的集合,会发生什么?从我目前阅读的文档中并不清楚这一点。 LinkedBlockingQueue foo = new LinkedBlockingQ
在下面的伪代码中,我有一个 poll() 函数,该函数在主线程中永远被调用。当我在 poll() 中没有使用 sleep() 语句时,每分钟只有 2-3 个项目被另一个线程添加到队列中。这是否意味着轮
当我第一次关注LinkedBlockingQueue中的unlink方法时,我认为trail的第二个参数意味着它是第一个参数-p的下一个节点,但是我错了,因为我在remove方法中发现(Object
我是一名优秀的程序员,十分优秀!