当前位置:网站首页 > 编程语言 > 正文

阻塞队列最多有几个方法(阻塞队列最多有几个方法控制)



阻塞队列实际上就是个队列,只不过当队列里面东西是空的时候,当从队列中拿数据的时候会阻塞,当队列满了的时候,向队列中添加元素也会阻塞。当我不断取元素直到队列里的元素为空,会自动挂起线程,当我队列里面突然有元素了,会自动唤醒取元素的线程。这个阻塞队列的好处是我们不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程,因为这一切BlockingQueue都一手给我包办了。

2.1ArrayBlockingQueue

基于数组的阻塞队列实现,在其内部维护了一个定长的数组,以便存储缓存的对象,同时它里面还维护了两个整型变量,分别标识着队列的头部和尾部在数组中的位置。它在生产者放入数据和消费者获取数据,都是同时共用一个锁对象,由此意味着两者无法真正的并行。

2.2LinkedBlockingQueue

基于链表的阻塞队列,内部也维持了一个数据缓冲队列(该队列有一个链表组成),与ArrayBlockingQueue不同的是这个的最大容量是Integer.MAX_VALUE。而且他对于生产者和消费者端分别采用了独立的锁来控制同步,这意味着在高并发情况下生产者和消费者可以并行地操作队列中的数据。

2.3 DelayQueue

DelayQueue中的元素只有当其指定的延迟时间到了,才能够从队列中获取到元素,他没有大小限制因此生产者永远不会阻塞。而且使用优先级队列实现延迟。

2.4PriorityBlockingQueue

他是一个支持优先级排序的无界阻塞序列,他也不会阻塞生产者,只会阻塞消费者,但是生产者生产的速度绝对不会快于消费者消费的速度,否则时间一长,会最终耗尽所有可用的堆空间。

2.5SynchronousQueue

一种无缓冲的等待队列,类似于无中介的直接交易,生产者生产好了之后必须得等消费者消费,如果没有消费者消费他就会一直等待,对于消费者来说也是这样。

2.6LinkedTransferQueue

LinkedTransferQueue是一个由链表构成的无界阻塞TransferQueue队列。相对于其他阻塞队列,LinkedTransferQueue多了tryTransfer和transfer方法。LinkedTransferQueue采用一种预占模式。

  • 队列不为空,直接取走数据
  • 队列为空,那就生成一个节点元素为null的入队,然后消费者线程在这等待
  • 如果生产者线程发现有一个null节点在队列上,生产者线程就不入队了直接将元素填充到该节点,并唤醒消费者线程取走元素,从调用的方法返回。

2.7LinkedBlockingDeque

LinkedBlockingDeque是一个由链表组成的双向阻塞队列,即可以从队列的两端插入和移除元素。还有一个特点就是可以设置超时时间参数,超时后返回false表示操作失败,也可以不设置超时参数一直阻塞,中断之后抛出InterruptedException异常。读元素时同样可以设置超时参数。

到此这篇阻塞队列最多有几个方法(阻塞队列最多有几个方法控制)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • nown是什么意思(now是什么意思中文翻译)2025-02-26 11:54:09
  • linux就要这样学(linux就这么学)2025-02-26 11:54:09
  • 密码库下载(密码库在线查询)2025-02-26 11:54:09
  • 多级列表在哪里找(多级列表怎么找)2025-02-26 11:54:09
  • 广度优先搜索是什么(广度优先搜索流程图)2025-02-26 11:54:09
  • 分层图怎么做出来的(分层分析图是怎么做出来的)2025-02-26 11:54:09
  • 进程控制块是进程存在的唯一标志对吗(进程控制块是进程存在的唯一标识)2025-02-26 11:54:09
  • 电脑扬声器安装程序(电脑扬声器安装程序怎么打开)2025-02-26 11:54:09
  • 目录导航窗口(目录导航怎么打开)2025-02-26 11:54:09
  • jflash读取程序(jflash下载程序步骤)2025-02-26 11:54:09
  • 全屏图片