当前位置: 首页 > 知识库问答 >
问题:

为什么ArrayBlockingQueue被称为有界队列,而LinkedBlockingQueue被称为无界阻塞队列?

庞旺
2023-03-14

这是为ArrayBlockingQueue编写的:

有界队列。当与有限的maximumPoolSizes一起使用时,有界队列(例如ArrayBlockingQueue)有助于防止资源耗尽,但可能更难调优和控制。队列大小和最大池大小可以相互权衡:使用大队列和小池可以最大限度地减少CPU使用量、OS资源和上下文切换开销,但可能会导致人为的低吞吐量。如果任务经常阻塞(例如,如果它们是I/O绑定的),系统可能能够为更多的线程安排时间,而不是允许的线程。使用小队列通常需要更大的池大小,这使得CPU更加繁忙,但可能会遇到不可接受的调度开销,这也会降低吞吐量。

共有1个答案

黄伟
2023-03-14

为什么您认为ArrayBlockingQueue可以无边界地增长?从它自己的文档中:

这是一个经典的“有界缓冲区”,其中一个固定大小的数组保存由生产者插入并由使用者提取的元素。一旦创建,容量就无法增加。试图将元素放入完整队列将导致操作阻塞;尝试从空队列中获取元素也会类似地被阻止。

换句话说,一旦它满了,它就满了--它不会增长。

 类似资料:
  • 我对ArrayBlockingQueue进行了一个简单的测试,如下所示: 结果是: 我的问题是,我已经将ArrayBlockingQueue的大小定义为3,而制作人将2、0和1放入队列,总共3个项目,现在队列已满,然后消费者消费了0,队列大小现在应为2,然后制作人将4放入队列,现在队列应已满,为什么制作人仍可以将6放入队列,应该被阻止

  • 目前我们有LinkedBlockingQueue和Con的LinkedQueue。 LinkedBlockingQueue可以有界,但它使用锁。 ConcurrentLinkedQueue不使用锁,但它不受限制。而这并不是阻碍投票的原因。 显然,我不能有一个既阻塞又无锁的队列(无等待或非阻塞或其他东西)。我不要求学术定义。 有人知道一个队列实现,它基本上是无锁的(不在热路径中使用锁),空时阻塞(不

  • 我找不到合适的解释。我可以找到JVM被称为虚拟机的原因,但无法找到jre不被称为虚拟机的原因。请帮忙。

  • 本文向大家介绍为什么Vue被称为“渐进框架”?相关面试题,主要包含被问及为什么Vue被称为“渐进框架”?时的应答技巧和注意事项,需要的朋友参考一下 为什么Vue被称为“渐进框架”?

  • 本文向大家介绍Java源码解析阻塞队列ArrayBlockingQueue介绍,包括了Java源码解析阻塞队列ArrayBlockingQueue介绍的使用技巧和注意事项,需要的朋友参考一下 Java的阻塞队列,在实现时,使用到了lock和condition,下面是对其主要方法的介绍。 首先看一下,阻塞队列中使用到的锁。 主要的锁是一个可重入锁,根据注释,它是用来保证所有访问的同步。此外,还有2个

  • 我有一个服务器-客户端应用程序不工作。这是代码:ChatServerHandler ChatServerInitializer 只是要提一下,其他一切都很好,信息只是没有收到。试图使用println在channelRead打印某些内容将不起作用。所以我知道它不会被打电话。另外,对不起,如果我不应该在这里发布整个代码,但我只是没有想法。