SynchronousQueue 是一个同步队列.同步队列与其他阻塞队列不太一样,插入元素时会一直阻塞直到有另一个线程取元素,取元素同样会一直阻塞直到有另一个线程插入元素.同步队列本身没有容量的概念,也不保持元素,可以理解为两个线程交换数据的媒介,因此也不能执行 size、peek 类型的操作.潍坊IT培训负责整理
LinkedBlockingQueue 是一个基于链表实现的有界的阻塞队列.如未指定队列大小,默认为Integer.MAX_VALUE.内部元素按先进先出的顺序排序,最后插入的元素位于队列尾部.
ArrayBlockingQueue 是一个基于数组实现的有界的阻塞队列.一旦创建队列的大小不会再发生变化,是一个典型的有界队列.内部元素按先进先出的顺序排序,最后插入的元素位于队列尾部.
PriorityBlockingQueue 是一个无界优先级阻塞队列.这个队列与 PriorityQueue 类似,但当队列空或满时会阻塞相关操作.
阻塞队列经常存在生产者等待消费者消费元素的情况,BlockingQueue 的子接口 TransferQueue 定义了一种新队列来支持这种情况,实现类为 LinkedTransferQueue.TransferQueue 允许生产者调用 transfer 方法来等待消费者调用 take 或 poll 消费元素,如果有消费者正在取元素则直接交给消费者,否则便把元素插入队列尾部并阻塞生产者当前线程直到元素被消费者取走.
Java 中的 Deque 实现
Deque 接口的实现相对较少,主要有 LinkedList、ArrayDeque、ConcurrentLinkedDeque 和 LinkedBlockingDeque.
LinkedList 就是我们常用的链表,实现了 Deque 接口.LinkedList 为了提高性能,本身支持从链表两端插入和取出元素,与 Deque 的要求恰好一致.
ArrayDeque 是一个基于数组的双向队列,大小可变.ArrayDeque 是非线程安全的,在多线程并发时需要外部调用者自行处理并发.
ConcurrentLinkedDeque 是一个基于链表实现的线程安全的无界双向队列.内部元素按先进先出的顺序排序,最后插入的元素位于队列尾部,不允许插入 null.当有多个线程同时访问双向队列时,此队列是一个比较合适的选择.
Deque 接口有一个子接口 BlockingDeque 定义了阻塞双向队列.实现类为 LinkedBlockingDeque,是一个基于链表实现的有界的阻塞双向队列.如未指定队列大小,默认为Integer.MAX_VALUE.内部元素按先进先出的顺序排序,最后插入的元素位于队列尾部.
以上就是潍坊IT培训给大家做的内容详解,更多关于IT的学习,请继续关注潍坊IT培训