为了账号安全,请及时绑定邮箱和手机立即绑定

LinkedBlockingQueue 阻塞问题

LinkedBlockingQueue 阻塞问题

幕布斯7119047 2019-03-21 18:15:28
当用LinkedBlockingQueue的take()方法获取队列信息时一旦队列为空,则进入阻塞状态再往队列里put()元素,take()方法会自动获取新加入元素,还是始终保持阻塞状态?
查看完整描述

4 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

自动获取,不会阻塞了


查看完整回答
反对 回复 2019-04-23
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

如果还是阻塞,这个类还有什么用?


查看完整回答
反对 回复 2019-04-23
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

建议看看源码,就知道了,很有好处的


查看完整回答
反对 回复 2019-04-23
?
波斯汪

TA贡献1811条经验 获得超4个赞

你采纳的答案是错误的。ConcurrentLinkedQueue是不阻塞的,LinkedBlockingQueue是阻塞的。分别给你上代码:如下:


import java.util.concurrent.LinkedBlockingQueue;

public class TestLinkedBlockingQueue {

    public static void main(String[] args) {

        LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<String>();

        try {

            queue.put("a");

            queue.put("b");

            System.out.println(queue.take());

            System.out.println(queue.take());

            System.out.println(queue.take());

            queue.put("c");

            System.out.println(queue.take());

        } catch (InterruptedException e) {

            e.printStackTrace();

        }

    }

}

//输出结果:

//a

//b

但是你再看非阻塞的ConcurrentLinkedQueue


import java.util.concurrent.ConcurrentLinkedQueue;

public class TestConcurrentLinkedQueue {

    public static void main(String[] args) {

        ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<String>();

        queue.add("a");

        queue.add("b");

        System.out.println(queue.peek());

        queue.remove();

        System.out.println(queue.peek());

        queue.remove();

        System.out.println(queue.peek());

        queue.remove();

        queue.add("c");

        System.out.println(queue.peek());

        queue.remove();

    }

}

//a

//b

//null

//Exception in thread "main" java.util.NoSuchElementException

//    at java.util.AbstractQueue.remove(AbstractQueue.java:117)

//    at TestConcurrentLinkedQueue.main(TestConcurrentLinkedQueue.java:14)


查看完整回答
反对 回复 2019-04-23
  • 4 回答
  • 0 关注
  • 1430 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信