加入收藏 | 设为首页 | 会员中心 | 我要投稿 鹰潭站长网 (https://www.0701zz.cn/)- 图像处理、低代码、云通信、数据工具、物联设备!
当前位置: 首页 > 站长资讯 > 动态 > 正文

你手写过堵塞队列吗?

发布时间:2020-11-05 14:10:23 所属栏目:动态 来源:互联网
导读:某人:没有手写过。 面试官:哦,那你说下堵塞队列吧 某人支支吾吾:这个有点忘了 面试官:没事,那我们下一个。 此处省略一万字。 面试官扭了扭严重负荷的颈椎:先到这里吧,你先回去等通知。 某人:好的。 不出意外,某人等了一个月,等的望眼欲穿,也没等

某人:没有手写过。

面试官:哦,那你说下堵塞队列吧

某人支支吾吾:这个有点忘了

面试官:没事,那我们下一个。

此处省略一万字。

面试官扭了扭严重负荷的颈椎:先到这里吧,你先回去等通知。

某人:好的。

不出意外,某人等了一个月,等的望眼欲穿,也没等到那个期待的电话。
队列其实就是跟平时排队一样,按照顺序来,先排队的先买到东西,后排队的后买到东西,排队的第一个叫队头,最后一个叫队尾,这就是队列的先进先出,这是和栈最大的区别。

获取数据
(1)poll():如果有数据,出队,如果没有数据,返回null
(2)poll(long timeout, TimeUnit unit):可以设置等待时间,如果没有数据,则等待,超过等待时间,则返回null
(3)take():如果有数据,出队。如果没有数据,一直等待(堵塞)

4.2BlockingQueue主要实现类

1.ArrayBlockingQueueArrayBlockingQueue是基于数组实现的,通过初始化时设置数组长度,是一个有界队列,而且ArrayBlockingQueue和LinkedBlockingQueue不同的是,ArrayBlockingQueue只有一个锁对象,而LinkedBlockingQueue是两个锁对象,一个锁对象会造成要么是生产者获得锁,要么是消费者获得锁,两者竞争锁,无法并行。

2.LinkedBlockingQueue:LinkedBlockingQueue是基于链表实现的,和ArrayBlockingQueue不同的是,大小可以初始化设置,如果不设置,默认设置大小为Integer.MAX_VALUE,LinkedBlockingQueue有两个锁对象,可以并行处理。

3.DelayQueue:DelayQueue是基于优先级的一个无界队列,队列元素必须实现Delayed接口,支持延迟获取,元素按照时间排序,只有元素到期后,消费者才能从队列中取出。

4.PriorityBlockingQueue:PriorityBlockingQueue是基于优先级的一个无界队列,底层是基于数组存储元素的,元素按照优选级顺序存储,优先级是通过Comparable的compareTo方法来实现的(自然排序),和其他堵塞队列不同的是,其只会堵塞消费者,不会堵塞生产者,数组会不断扩容,这就是一个彩蛋,使用时要谨慎。
1.插入数据
(1)offer(E e):如果队列没满,返回true,如果队列已满,返回false(不堵塞)
(2)offer(E e, long timeout, TimeUnit unit):可以设置等待时间,如果队列已满,则进行等待。超过等待时间,则返回false
(3)put(E e):无返回值,一直等待,直至队列空出位置

(编辑:鹰潭站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读