gpt4 book ai didi

java - 非阻塞延迟队列,Java

转载 作者:行者123 更新时间:2023-12-01 11:57:10 25 4
gpt4 key购买 nike

我正在使用 Java 的 DelayQueue在第二次延迟后调度事件。但问题是,在重负载下,DelayQueue 上的消费者会阻塞,直到来自另一个线程的大量 Offer() 操作消失。

有谁知道Java中的非阻塞延迟队列实现吗?

最佳答案

我认为您误解了 DelayQueue API 或线程调度的工作方式。

如果您想要真正的非阻塞队列操作,那么 DelayQueue 已经提供了它们。例如,poll() 将立即返回队列条目或 null。它不会阻塞调用线程。 offer(...) 方法是无阻塞插入的等效方法。

另一方面,如果您实际上是说某些线程“饥饿”,那么您对此无能为力。 Java线程调度并不“公平”:

  • 如果您有许多可运行的线程,则不会尝试为每个线程提供相似的运行时间。

  • 如果有多个线程等待原始锁或通知,那么调度程序将不会尝试“公平”地选择一个线程。

如果线程数量多于运行它们的核心数量,则更有可能出现线程匮乏的情况。

最好的解决方案是设计你的算法,这样即使线程调度不公平也没关系。应该没关系;请参阅Is a DelayQueue without fairness problematic? .

<小时/>

郑重声明,我不知道有宣传公平调度的 DelayQueue 替代品。

关于java - 非阻塞延迟队列,Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28367777/

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