gpt4 book ai didi

Java LinkedBlockingQueue 能够在完成时发出信号吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:42 27 4
gpt4 key购买 nike

我的情况是单个生产者和单个消费者处理对象队列。队列可能为空有两种情况:

  1. 消费者处理对象的速度比生产者生成新对象的速度快(生产者在生成对象之前使用 I/O)。
  2. 生产者已完成对象的生成。

如果队列为空,我希望消费者等到新对象可用或生产者发出完成信号。

到目前为止,我的研究让我一无所获,因为我仍然以一个同时检查队列和一个单独的 boolean 标志 (isDone) 的循环结束。鉴于没有办法等待多个锁(想到等待队列和标志),可以做些什么来解决这个问题?

最佳答案

首先,使用包装器“开销太大”的建议是一种猜测,IMO 是一个非常糟糕的建议。这个假设应该通过具有实际需求的性能测试来测量。当且仅当测试失败时,然后使用分析器验证包装队列对象的原因。

如果您这样做并且包装队列对象(在本例中为字符串)确实是 Not Acceptable 性能的原因,那么您可以使用此技术:创建一个已知的唯一字符串作为“消息的结尾”消息。

    public static final String NO_MORE_MESSAGES = UUID.randomUUID().toString();

然后当从队列中检索字符串时,只需检查(它可以是引用检查)字符串是否为 NO_MORE_MESSAGES。如果是这样,那么您就完成了处理。

关于Java LinkedBlockingQueue 能够在完成时发出信号吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9544295/

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