博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Concurrent包学习之 BlockingQueue源码学习
阅读量:5809 次
发布时间:2019-06-18

本文共 1330 字,大约阅读时间需要 4 分钟。

上一篇学习了ExecutorService和其它相关类的源码,本篇要学习的BlockingQueue中的源码,as always,先上类图

其实继承(实现)的层次比较简单,我们只要需要先学习一下BlockingQueue中的方法:

public interface BlockingQueue
extends Queue
{ boolean add(E e);--往队列中插入一个对象,队列满了会抛异常 boolean offer(E e);--同上,区别是队列满了会返回false void put(E e) throws InterruptedException;--插入一个元素,满了就等待 boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException;--规定时间内插入元素 E take() throws InterruptedException;--弹出队首 E poll(long timeout, TimeUnit unit) throws InterruptedException;--规定时间内弹出队首 int remainingCapacity();--队列剩余大小 boolean remove(Object o);--删除一个equals o的对象 public boolean contains(Object o);--是否包含o int drainTo(Collection
c);--把队列迁移到另外一个collection结构中 int drainTo(Collection
c, int maxElements);--迁移,有个最大迁移数量}

其实除了poll和offer 其它方法一般我们是用不到的,所以还是很简单的接口定义。下面去看一下具体的几个实现类。

ArrayBlockingQueue--声明时就确定大小的队列,fifo方式。(方法基本和接口一致,没有特别要说明的内容)

LinkedBlockingQueue--链表实现的queue-remove效率会高一些

PriorityBlockingQueue--优先级队列

SynchronousQueue--阻塞队列,必须拿走一个才能放进来一个,也就是最多只有一个~

DelayQuque--就是放进去的内容,延迟时间到了后才可以获得

--

LinkedBlockDeque--双端队列 :offerFirst/offerLast,pollFirst/pollLast

LinkedTransferQueue--类似LinkedUnBlockedQueue,其实就是transfer方法有人再等待队列内容就直接给他这个元素,没人在等就放在队列里面。也就是效率会更高。

 

转载于:https://www.cnblogs.com/congsg2016/p/5639105.html

你可能感兴趣的文章
HDU1576 A/B【扩展欧几里得算法】
查看>>
廖雪峰javascript教程学习记录
查看>>
WebApi系列~目录
查看>>
限制CheckBoxList控件只能单选
查看>>
Java访问文件夹中文件的递归遍历代码Demo
查看>>
项目笔记:测试类的编写
查看>>
如何迅速分析出系统CPU的瓶颈在哪里?
查看>>
通过容器编排和服务网格来改进Java微服务的可测性
查看>>
re:Invent解读:没想到你是这样的AWS
查看>>
PyTips 0x02 - Python 中的函数式编程
查看>>
阿里云安全肖力:安全基础建设是企业数字化转型的基石 ...
查看>>
使用《Deep Image Prior》来做图像复原
查看>>
如何用纯 CSS 为母亲节创作一颗像素画风格的爱心
查看>>
Linux基础命令---rmdir
查看>>
优秀程序员共有的7种优秀编程习惯
查看>>
iOS sqlite3(数据库)
查看>>
粤出"飞龙",打造新制造广东样本
查看>>
编玩边学获数千万元A轮融资,投资方为君联资本
查看>>
开发者论坛一周精粹(第五十五期) 全站HTTPS之OSS教程 一次可以备案几个网站?...
查看>>
蓝图(Blueprint)详解
查看>>