请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

各种队列的区别

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

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

正在回答 回答被采纳积分+3

1回答

悟空 2021-04-28 21:28:37

对,这两个的区别就是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 回复 有任何疑惑可以回复我~
  • 谢谢老师 明白了
            new Thread(() -> {
                for (int i = 0; i < 2; i++) {
                    try {
                        queue.put(new Resource(i));
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
    
            new Thread(() -> {
                for (int i = 0; i < 2; i++) {
                    try {
                        Thread.sleep(1000);
                        Resource take = queue.take();
                        System.out.println(take.a);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
    这个是我的测试代码,我测试了一下,他是一个放进去,等一秒再去取,然后再放进去,再等一秒再去取。 所以他确实不具备存储功能只能一个个去取!
    回复 有任何疑惑可以回复我~ 2021-04-28 21:35:36
  • 悟空 回复 提问者 weixin_慕工程6414819 #2
    对的,这就是它的特点。
    回复 有任何疑惑可以回复我~ 2021-04-28 23:48:50
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号