gpt4 book ai didi

java - 不阻塞的有界 BlockingQueue

转载 作者:行者123 更新时间:2023-11-29 04:04:15 25 4
gpt4 key购买 nike

这个问题的标题让我怀疑这是否存在,但仍然:

我感兴趣的是是否有 Java 的 BlockingQueue 的实现,它受大小限制,从不阻塞,而是在尝试入队太多元素时抛出异常。

编辑 - 我将 BlockingQueue 传递给执行器,我想它使用它的 add() 方法,而不是 offer()。可以编写一个 BlockingQueue 来包装另一个 BlockingQueue,并将对 add() 的调用委托(delegate)给 offer()。

最佳答案

编辑:根据您的新描述,我认为您问错了问题。如果您使用的是 Executor,您可能应该定义一个自定义的 RejectedExecutionHandler而不是修改队列。这仅在您使用 ThreadPoolExecutor 时有效,但如果您不使用,则修改 Executor 而不是队列可能是更好的主意。

我认为覆盖 offer 并使其表现得像 add 是错误的。接口(interface)方法构成契约。使用阻塞队列的客户端代码取决于实际执行文档指定的方法。打破这条规则会打开一个充满伤害的世界。那,而且很不雅观。


add() BlockingQueues 上的方法可以做到这一点,但它们也有一个 offer()方法通常是更好的选择。来自 offer() 的文档:

Inserts the specified element at the tail of this queue if it is possible to do so immediately without exceeding the queue's capacity, returning true upon success and false if this queue is full. This method is generally preferable to method add(E), which can fail to insert an element only by throwing an exception.

这适用于所有此类队列,无论具体实现如何(ArrayBlockingQueue、LinkedBlockingQueue 等)

BlockingQueue<String> q = new LinkedBlockingQueue<String>(2);
System.out.println(q.offer("foo")); // true
System.out.println(q.offer("bar")); // true
System.out.println(q.offer("baz")); // false

关于java - 不阻塞的有界 BlockingQueue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1231378/

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