Java:如何实现具有长期使用者的并发队列以及短期生产者的处理保证?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (102)

我正在寻找一个并发队列的现有实现,可以用来实现典型的生产者 - 消费者模式,但需要注意以下几点。每个生产者都是短暂的,但在退出之前必须阻止,直到它放入队列的所有消息都被消费者处理。消费者和队列是长寿的。

我所拥有的一些想法是使用单个分区队列,其中每个分区都分配给生产者,或者为每个生产者设置专用队列,并在生产者队列之上构建一种复合队列,供消费者使用。

这看起来像是一个常见的http服务器模式,它有许多http线程,它们就像队列的生产者和固定数量的工作线程一样,它们就像队列的消费者一样。然后,在将http响应返回到http客户端之前,http威胁将阻塞,直到它排队的工作完全由消费者处理。

提问于
用户回答回答于

每个生产者都是短暂的,但在退出之前必须阻止,直到它放入队列的所有消息都被消费者处理。消费者和队列是长寿的。

Stream.parallelStream()做这个。这是一种常见的模式,可以通过几种方式解决,例如ExecutorService.submit(task)+ Future.get()。

在生成器队列之上构建一种复合队列

我会尽量让它变得简单。

什么最有效取决于您的任务的工作量。例如,它是CPU还是IO绑定。

扫码关注云+社区

领取腾讯云代金券