SynchronousQueue源码解析
SynchronousQueue是一个比较特别的阻塞队列,它是一个没有容量的队列。如果有线程往该队列里面添加元素,但是又没有消费线程过来消费,就不能在添加元素,反之亦然。
SynchronousQueue也被应用到CachedThreadPool中,作为其默认的阻塞队列。
类图
SynchronousQueue的类图如下所示:
SynchronousQueue实现了BlockingQueue接口和继承了AbstractQueue类。
1 | public class DelayQueue<E extends Delayed> extends AbstractQueue<E> |
BlockingQueue接口只是定义了一些阻塞队列的公共方法,如下:
1 | public interface BlockingQueue<E> extends Queue<E> { |
AbstractQueue也实现了Queue接口,还提供了某些方法的默认实现
1 | // 从这可以发现,Add方法,其实就是调用的offer方法 |
主要属性
1 | /** The number of CPUs, for spin control */ |
主要方法
无参构造函数
1 | /** |
创建一个不公平的队列
有参构造函数-指定锁是否公平
根据传入的fair参数,判断创建的是公平锁-TransferQueue还是不公平锁-TransferStack
1 | /** |
TransferQueue
TransferQueue继承了了Transfer抽象类,并实现了其transfer方法。它是一个FIFO的双端队列,内部以QNode对象作为节点对象。SynchronousQueue通过TransferQueue实现了公平锁。
1 | static final class TransferQueue<E> extends Transferer<E> { |
Transfer抽象类
只有一个抽象方法
1 | /** |