BlockingQueue阻塞队列的几个常用的实现类以及他们的区别

BlockingQueue

jdk官方给我们提供的阻塞队列接口,并且给我们提供了丰富的实现类供我们使用。

ArrayBlockingQueue

由数组组成的有界阻塞队列,构造方法要求必须设置队列的初始大小。底层是用一个Lock 2个Condition实现的线程安全。

LinkedBlockingQueue

由链表组成的有界阻塞队列,构造方法不设置初始值默认Integer的最大值,底层是用2个Lock 2个Condition实现的线程安全,设计比较巧妙。

LinkedBlockingDeque

双向阻塞队列,可以从队列的头和尾都可以插入和移除元素,ForkJoin中的工作窃取就是用的这种阻塞队列

PriorityBlockingQueue

支持优先级的无界阻塞队列,传入的对象必须实现comparable接口重写compareTo方法。

DelayQueue

支持优先级的无界阻塞队列,支持延时获取的元素的阻塞队列,元素必须要实现Delayed接口

SynchronousQueue

一个不存储元素的阻塞队列,每一个put操作都要等待一个take操作,反之亦然。

LinkedTransferQueue

一个无界阻塞队列。相对于其他阻塞队列,LinkedTransferQueue多了tryTransfer和transfer方法。LinkedTransferQueue采用一种预占模式。意思就是消费者线程取元素时,如果队列不为空,则直接取走数据,若队列为空,那就生成一个节点(节点元素为null)入队,然后消费者线程被等待在这个节点上,后面生产者线程入队时发现有一个元素为null的节点,生产者线程就不入队了,直接就将元素填充到该节点,并唤醒该节点等待的线程,被唤醒的消费者线程取走元素,从调用的方法返回。我们称这种节点操作为“匹配”方式。
原文链接:https://blog.csdn.net/qq_38293564/article/details/80593821

 

 

 

 

© 版权声明
THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发