博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BlockingQueue接口
阅读量:3747 次
发布时间:2019-05-22

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

BlockingQueue是一个可以设置容量的阻塞队列的接口,如果没有进行容量限制则为Integer.MAX_VALUE的;

BlockingQueue实现主要用于生产者 - 消费者队列,但另外支持Collection接口。
已知的实现类有
ArrayBlockingQueue
DelayQueue
LinkedBlockingDeque
LinkedBlockingQueue
LinkedTransferQueue
PriorityBlockingQueue
SynchronousQueue
BlockingQueue的方法有四种形式

* 抛出异常 指定值 阻塞 超出时间
插入 add(e) offer(e) put(e) offer(e, time, unit)
移除 remove() poll() take() poll(time, unit)
检查 element() peek()

抛出异常

  • add(e):将指定的元素插入到该队列的尾部,如果队列没满就插入到末尾,并且返回true,当队列满了,就抛出异常Exception in thread "main" java.lang.IllegalStateException: Queue full
  • remove(Object o):从此队列中移除指定元素的单个实例,如果存在返回true,否则返回false;
  • element():取得但不删除此队列的头部。此方法与peek的不同之处仅在于,如果此队列为空,则抛出异常;

指定值

  • offer(e):如果该队列容量没有满,则将指定的元素插入此队列,成功时返回true,如果当前没有可用空间则返回false。
  • poll():检索并删除此队列的头部,如果此队列为空,则返回null,返回值是已经删除的头部。
  • peek():检索但不移除此队列的头部,如果此队列为空,则返回null。

阻塞

  • put(e):将指定的元素插入此队列,等待空间变为可用。会一直阻塞当前线程。
  • take():检索并删除此队列的头部,如果队列是空的,线程就会等待,直到队列里有元素才返回。

超出时间

  • offer(e, time, unit): 第二个参数是时间,第三个参数是时间单位,如果在等待的时间内,队列已经满了,就插不进去了,就会返回false。如果没满就忽略等待时间,直接插入,该方法也是线程阻塞的;
  • poll(time, unit):和上面同理;
final BlockingQueue
basket = new LinkedBlockingQueue
(2); basket.add("111"); basket.add("222"); try { new Thread() { @Override public void run() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } basket.poll(); System.out.println("MyClass.run"); } }.start(); boolean offer = basket.offer("333", 5000, TimeUnit.MILLISECONDS); System.out.println(offer); } catch (InterruptedException e) { e.printStackTrace(); }

LinkedBlockingQueue

ArrayBlockingQueue

转载地址:http://kxbsn.baihongyu.com/

你可能感兴趣的文章
mysql-事务
查看>>
C语言排序算法
查看>>
python常用模块整理(超详细)
查看>>
用nginx做反向代理
查看>>
史上最易部署lvs集群-tun模式
查看>>
python进程,线程,协程
查看>>
python网络编程
查看>>
你值得拥有的linux下的网络io 同步/异步/阻塞/非阻塞/BIO/NIO/AIO
查看>>
nginx日志文件配置
查看>>
HTTP over SSL/TLS
查看>>
CentOS安装fortune+cowsay
查看>>
用vue创建一个项目
查看>>
$listeners与.native的使用
查看>>
熟悉Linux 下静态库.a 与.so 库文件的生成与使用——实例
查看>>
算法训练 1的个数(输入正整数n,判断从1到n之中,数字1一共要出现几次。例如1123这个数,则出现了两次1。例如15,那么从1到15之中,一共出现了8个1。)
查看>>
算法训练 素因子去重(给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1)
查看>>
算法训练 二进制数数( 给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。   如5的二进制为101,包含2个“1”。)
查看>>
第十届MathorCup高校数学建模D题解题思路
查看>>
2020年高教社杯全国大学生数学建模竞赛赛题 C题分析与思路!(持续更新)
查看>>
2020年高教社杯全国大学生数学建模竞赛赛题 B题分析与思路!(持续更新)
查看>>