当前位置: 首页 > 面试题库 >

对于单生产者单消费者方案,哪种Java阻塞队列最有效

康鹏云
2023-03-14
问题内容

我正在为标准Java系统工作,对生产者来说,这有严格的时序要求(1/100秒的毫秒)。

我有一个生产者将内容放置在阻塞队列中,然后一个消费者使用了该内容并将其转储到文件中。当数据不可用时,使用者将阻塞。

显然,阻塞队列是合适的接口,但是如果我想 最小化生产者的成本,
我应该选择哪种实际实现?当我将内容放入队列时,我希望尽可能少地进行诸如锁定和分配之类的事情,而且我不介意消费者是否需要等待更长的时间或更辛苦地工作。

是否有一个可以实现更快的实现,因为我只有一个消费者和一个生产者?


问题答案:

好吧,确实没有太多选择。让我看一下列出的子类:

DelayQueueLinkedBlockingDequePriorityBlockingQueue,和SynchronousQueue都为需要额外功能的特殊情况除外;
在这种情况下,它们没有任何意义。

只有树叶ArrayBlockingQueueLinkedBlockingQueue。如果您知道如何判断是否需要a
ArrayList或a LinkedList,则可以自己回答。

请注意,在中LinkedBlockingQueue,“在每次插入时都会动态创建链接的节点”;这可能会促使你走向ArrayBlockingQueue



 类似资料:
  • 我试图用阻塞队列实现一些消费者-生产者问题。为了达到某种目的,我决定编写文件搜索工具。 我认为搜索机制是递归工作的,每个新目录都将有新的线程池来提高搜索速度。 我的问题是,我不知道如何实现最终停止打印线程(消费者)的机制——当搜索线程完成工作时。 我试图用一些想法来做到这一点,比如毒丸,但它效果不佳(线程在打印任何结果之前停止)。任何想法我该怎么做? 下面是一些代码: 搜索机制: } 打印机: }

  • 问题内容: 我正在研究有关Java中线程的生产者和消费者设计模式,最近我在Java 5中进行了探索,引入Java 5中引入了BlockingQueue数据结构。现在,它变得更加简单,因为BlockingQueue通过引入阻塞方法隐式地提供了此控件。 put()和take()。现在,您无需使用等待和通知即可在生产者和消费者之间进行通信。如果有界队列,则如果Queue已满,BlockingQueue

  • 问题内容: 我想创建某种线程应用程序。但是我不确定在两者之间实现队列的最佳方法是什么。 因此,我提出了两个想法(这两个想法可能都是完全错误的)。我想知道哪种更好,如果它们都烂了,那么实现队列的最佳方法是什么。我关心的主要是这些示例中队列的实现。我正在扩展一个内部类的Queue类,它是线程安全的。下面是两个示例,每个示例有4个类。 主班 消费阶层 生产者类别 队列类 要么 主班 消费阶层 生产者类别

  • 我有一个使用ActiveMQ的消息队列。web请求用persistency=true将消息放入队列。现在,我有两个消费者,它们都作为单独的会话连接到这个队列。使用者1总是确认消息,但使用者2从不这样做。 JMS队列实现负载平衡器语义。一条消息将被一个使用者接收。如果在发送消息时没有可用的使用者,它将被保留,直到有可以处理消息的使用者可用为止。如果使用者接收到一条消息,但在关闭之前没有确认它,那么该

  • 我正在使用(java)LinkedBlockingQueue创建资源池,其中 资源元素是等价的,属于一个池,它们的排序是无关紧要的。 消费者是竞争线程,一次抓取一个资源,使用“拉”操作,处理资源,然后通过“添加”操作将其返回给池。 当特定资源被消费者线程使用时,它不得对其他消费者线程可用。 问题是:LinkedBlockingQueue不会对等待的消费者进行FIFO,而且服务水平也不统一。 关于这

  • 我创建了两个apache camel(blueprint XML)kafka项目,一个是kafka-producer(接受请求并将其存储在kafka服务器中),另一个是kafka-consumer(从kafka服务器获取ups消息并处理它们)。 这个设置对单个主题和单个消费者都很有效。然而,我如何在同一个Kafka主题中创建单独的消费者组?如何在不同的消费者群体中路由同一主题中的多个消费者特定消息