BlockingQueue学习总结

今天浏览博客,看了一道阿里的面试题,简单的看了一眼,完全不知道是啥玩意,于是学了一下,想想自己工作都快3年了,好多还不认识,有点难过,感觉自己都落伍了。
我来把这道题粘出来,你们看看有会的吗?

题目:请评估一下程序的执行结果?
public class SynchronousQueueQuiz {
    public static void main(String[] args) throws Exception {
        BlockingQueue<Integer> queue = new
        SynchronousQueue<>();
        System. out .print(queue.offer(1) + " ");
        System. out .print(queue.offer(2) + " ");
        System. out .print(queue.offer(3) + " ");
        System. out .print(queue.take() + " ");
        System. out .println(queue.size());
    }
}

A. true true true 1 3

B. true true true (阻塞)

C. false false false null 0

D. false false false (阻塞)

出题人:阿里巴巴出题专家:桃谷/阿里云中间件技术专家

先不管这道题的答案是什么,首先需要了解一下BlockingQueue,才能知道答案把,哈哈!!

查了一下,简单的说:就是 阻塞式队列,如果此时该队列为空时,就会进入阻塞等待的状态,等到写入元素就会被唤醒,但是但该队列为满的状态时,就会一直被阻塞,直到有空间了,才会被唤醒!

这回这道题好像有一点思路了, BlockingQueue queue = new SynchronousQueue<>(); 此时该队列中是空队列,

  • offer(E e): 添加元素,如果BlockingQueue可以容纳,则返回true,否则返回false,

这回就清楚了,当queue 为空时使用offer,是容纳不了的,就会返回false! 所以前三个都应该返回false.

  • take():取走BlockingQueue里排在首位的对象,若BlockingQueue为空,阻断进入等待状态直到Blocking有新的对象被加入为止

哦,queue 一直都是空的,所以就会阻塞!!!最后输入的长度也是会被阻塞执行不下去了,哦,这道题选D,哈哈!
我也不知道我的理解对不对,希望大神给予帮助,嘿嘿,多多学习!
想要了解更多关于 BlockingQueue 可以参考一下,很好的两篇文章:
1、https://blog.csdn.net/woshimike/article/details/53762148
2、https://wsmajunfeng.iteye.com/blog/1629354

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值