各种队列的区别

来源:9-20 并发队列简介

weixin_慕工程6414819

2021-04-28

老师,我一直没太明白各种队列的区别。
ArrayBlockQueue, LinkedBlockingQueue 首先这两个,我试了一下都可以设置他们的大小,只不过ArrayBlockQueue必须要给定大小,LinkedBlockingQueue如果不给默认是是整数最大值,所以这两个的区别是不是就是ArrayDeque和LinkedList的区别,他们内部一个是可变数组一个是双链表?

其次是 SynchronousQueue这个队列,我尝试着在这个队列放入了很多个数据,然后取出这些数据,发现也是可以一个个取出来,那么他应该也是一个有大小的队列具有存储的功能然后FIFO,但是您上课说这个是没有存储,直接用来交换,我就不是很理解体现在哪?

写回答

1回答

悟空

2021-04-28

对,这两个的区别就是ArrayDeque和LinkedList的区别,他们内部一个是可变数组一个是双链表,数据结构不同。

SynchronousQueue不能同时存多个数据,你可以debug这个代码试试,无法走到下面的。

public static void main(String[] args) throws InterruptedException {
    SynchronousQueue<Object> objects = new SynchronousQueue<>();
    objects.put(new Object());
    objects.put(new Object());
    objects.put(new Object());
}


0
2
悟空
回复
weixin_慕工程6414819
对的,这就是它的特点。
2021-04-28
共2条回复

深度解密Java并发工具,精通JUC,成为并发多面手

JUC全方位讲解,构建并发工具类知识体系

1599 学习 · 573 问题

查看课程