阅读ArrayBlockingQueue源码,很容易知道有界阻塞队列的长度至少为1,也就是至少能缓存下一个数据。长度为0的阻塞队列是没有意义的,因为生产者不能生产,消费者不能消费。但是SynchronousQueue的javadoc文档提到A synchronous queue does not have any internal capacity, not even a capacity of one。也就说同步队列的容量是0,不会缓存数据。
下面的代码片段使用了长度为1的BlockingQueue,可以看到2个生产者有1个会被阻塞(因为队列已满)。
package concurrent;
import java.util.concurrent.ArrayBlockingQueue;
public class TestSynchronousQueue
{
private static ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(1);
public static void main(String[] args) throws Exception
{
new Productor(1).start();
new Productor(2).start();
System.out.println(