SynchronousQueue在JDK1.5引入,位于java.lang.concurrent包,由Doug Lea等人共同完成。Synchronous翻译为同步的同时的,从名字来看这个Queue的实现也是如此,该阻塞队列内部没有可用的容量,消费线程和生产线程的动作同时发生,在Executor中的CachedThreadPool就是用这种队列实现。
不同于其他类型的队列,SynchronousQueue类似于CSP和Ada中使用的集合通道,被设计的非常适合切换,其中一个线程中运行的对象必须与另一个线程中运行的对象同步,以便将一些信息、事件或任务交给它。
由于队列中不包含容量,即使该队列实现了Collection和Iterator接口,迭代器、遍历等方法也是不支持的。
接下来对SynchronousQueue的实现进行简单分析。查看UML类图: