【阻塞队列】-- SynchronousQueue源码解析(jdk1.8)

概述

SynchronousQueue是一个没有数据缓冲的阻塞队列,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。SynchronousQueue中因为不存储元素,所以peek方法永远返回null。 SynchronousQueue支持公平策略。SynchronousQueue看似是阻塞队列中最简单的一种,却是几个解析中最复杂的一个。

【阻塞队列】-- DelayQueue源码解析(jdk1.8)

概述

DelayQueue是一个基于PriorityQueue优先级队列实现的有序的无界阻塞队列。放入队列的元素必须实现Delayed接口,其中的对象只能在其到期时才能从队列中取走。

【阻塞队列】-- PriorityBlockingQueue源码解析(jdk1.8)

概述

PriorityBlockingQueue一个无界的带有优先级的动态阻塞队列,插入队列的元素默认情况下采用自然顺序升序排列,如果用户传入了Comparator,那么使用传入的Comparator进行排序。PriorityBlockingQueue内部使用一把锁用于消费,当容量到达阈值时,会自动扩容,扩容时由volatile修饰的allocationSpinLock作为cas自旋锁的标识(保证扩容操作不会阻塞take操作)。

【阻塞队列】-- LinkedBlockingDeque源码解析(jdk1.8)

概述

LinkedBlockingDequeLinkedBlockingQueue不同,它是一个由链表组成的无界双端阻塞队列,生产消费用一把锁,头尾都可以生产消费元素,由于多了一个生产插入的入口,因此多线程情况下,入队的效率会提升一倍。

【阻塞队列】-- LinkedBlockingQueue源码解析(jdk1.8)

概述

LinkedBlockingQueue是由链表组成的单向无界阻塞(严格意义上来并不是无界限) 队列。与ArrayBlockingQueue 不同的是,LinkedBlockingQueue生产消费各用一把锁,生产用的是putLock,消费是takeLock,目的就是为了增大吞吐量,但是因为每个节点都是一个对象,所以比较耗费内存。

【阻塞队列】-- ArrayBlockingQueue源码解析(jdk1.8)

概述

ArrayBlockingQueue是由数组组成的一个单向有界阻塞队列。ArrayBlockingQueue内部只有一把锁ReentrantLock,通过ReentrantLockCondition来控制内部的生产与消费。ArrayBlockingQueue创建时必须指定容量,当队列满后会阻塞生产的线程,队列空时会阻塞消费的线程。

【阻塞队列】-- BlockingQueue总结(jdk1.8)

概述

BlockingQueue即是我们所说的阻塞队列,它是一个接口,继承自Queue接口。后面我们要讲的阻塞队列,都实现自该接口。包括:

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×