阅读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("main over.");
}
static class Productor extends

本文探讨了SynchronousQueue与长度为1的BlockingQueue的区别。SynchronousQueue容量为0,不存储元素,生产者必须等待消费者就绪,而长度为1的BlockingQueue能在无消费者时暂存一个元素。通过代码示例展示了它们在不同场景下的行为差异,并引用了StackOverflow上的文章来说明SynchronousQueue的适用情况。
最低0.47元/天 解锁文章
1145

被折叠的 条评论
为什么被折叠?



