阅读java.util.concurrent.SynchronousQueue源码Note
java.util.concurrent.SynchronousQueue 同步队列,主要用去生产与消费! 采用CAS方式来实现并发控制, sun.misc.Unsafe 基于公平性做了两种实现,一公平策略,使用队列实现;二非公平策略,使用栈实现。 常用操作 操作 put 一直阻塞,直至数据被消费 offer 分为两种,一种不阻塞,尝试阿静数据放入队列,无空间时,则直接返回false;一种指定阻塞时间,超时后仍无空间,返回false,否则返回true take 一直阻塞,直至获取到数据 poll 分为两种,一种不阻塞,尝试从队列中获取数据,未获取到返回null;另一种指定阻塞时间,超时后仍未获取到数据,返回null 底层实现 两种策略的实现,底层均是使用了 java.util.concurrent.SynchronousQueue.Transferer , 此抽象类定义了如何放入数据和从队列中取数据,相当于是传输数据,方法名称也很贴切: transfer . 1.1 首先来看非公平策略的实现,此策略使用栈实现, java.util.concurrent.SynchronousQueue.TransferStack ,栈中定义了栈顶节点head,类型为 java.util.concurrent.SynchronousQueue.TransferStack.SNode , 1.2