2019独角兽企业重金招聘Python工程师标准>>>

提供了三个构造方法:

①.ArrayBlockingQueue(int capacity)//指定长度,默认加锁机制为非公平锁

②.ArrayBlockingQueue(int capacity, boolean fair)//显示指定使用公平锁或非公平锁

③.ArrayBlockingQueue(int capacity, boolean fair,Collection<? extends E> c) //可以传入一个集合

全局变量:

final Object[] items;//queue维护了一个定长数组用来当对象容器,在初始化时创建
 int takeIndex;
 int putIndex;
 int count;//容器的大小

final ReentrantLock lock;//显示锁
 private final Condition notEmpty;//用来做线程通信,若队列已空则阻塞

private final Condition notFull;//判断是否已满,满则阻塞

方法:

 /**添加**/public void put(E e) throws InterruptedException {checkNotNull(e);//非空检查,若为空抛异常final ReentrantLock lock = this.lock;//加锁lock.lockInterruptibly();try {while (count == items.length)notFull.await();//队列满了阻塞.insert(e);//否则添加} finally {lock.unlock();}}private void insert(E x) {items[putIndex] = x;putIndex = inc(putIndex);++count;notEmpty.signal();//唤醒消费线程}final int inc(int i) {//返回下一个该添加的位置,若满则从0开始return (++i == items.length) ? 0 : i;}/**取**/public E take() throws InterruptedException {final ReentrantLock lock = this.lock;lock.lockInterruptibly();try {while (count == 0)notEmpty.await();//没有可消费对象阻塞return extract();//获取} finally {lock.unlock();}}private E extract() {final Object[] items = this.items;E x = this.<E>cast(items[takeIndex]);//获取一个强转对象items[takeIndex] = null;/清除容器中这个元素takeIndex = inc(takeIndex);//下一个可取的位置--count;notFull.signal();//唤醒生产线程return x;}

以上是几个常用的方法, 其他方法差别不大.

转载于:https://my.oschina.net/u/2486137/blog/1570429

java队列,ArrayBlockingQueue相关推荐

  1. Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析

    转载自  Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析 Java中的阻塞队列接口BlockingQueue继承自Queue接口. Block ...

  2. java 队列_百战程序员:Java并发阻塞队列

    阻塞队列 (BlockingQueue)是Java util.concurrent包下重要的数据结构,BlockingQueue提供了线程安全的队列访问方式:当阻塞队列进行插入数据时,如果队列已满,线 ...

  3. java队列 双队列_Java队列– Java队列

    java队列 双队列 Java Queue is an interface available in java.util package and extends java.util.Collectio ...

  4. JAVA队列( Queue ) 详解

    什么是队列? 队列是一种特殊的线性表,遵循先入先出.后入后出的基本原则,一般来说,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,但是java的某些队列运行在任何地方插入删除:比如我们常用的 ...

  5. 使用 JAVA 队列把高并发转为批量串行降低后端并发压力

    整体思路: 1.多用户并发请求后端接口: 2.后端会启动多个线程处理前端的请求,如果并发很大就会对后端数据库造成很大的并发压力: 3.通过 JAVA 队列把用户的并发请求转换为串行批量操作数据库: 4 ...

  6. Java队列 PriorityQueue

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/120829314 本文出自[赵彦军的博客] Java队列 Queue Java队列 ...

  7. Java队列 Deque

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/120828826 本文出自[赵彦军的博客] Java队列 Queue Java队列 ...

  8. Java队列 Queue

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/120828046 本文出自[赵彦军的博客] Java队列 Queue Java队列 ...

  9. Java:Java 队列的遍历

    Java队列到底有没有可以遍历的功能呢?暂且试一下吧 参考链接:stl容器遍历测试 1.LinkedList实现简单遍历 for(Iter =LocTimesSerials.size()-1; iSe ...

最新文章

  1. Aspose.Cells设置单元格格式
  2. linux将mysql的错误连接数_Mysql学习笔记(十二) 并发参数调节
  3. 李开复:非常看好移动互联网的未来 --记CSDNCTO俱乐部李开复交流会
  4. 鸿蒙os终于开始大升级,华为鸿蒙OS终于要迎来大规模推送升级了
  5. 编译boost相关文件
  6. site_url()和base_url()
  7. 东方希望上云 告诉你数字化门槛儿到底有多高?
  8. 计算机网络的ip分配,IP地址分配_网络设备技术应用_太平洋电脑网PConline
  9. [BZOJ]3926 诸神眷顾的幻想乡(ZJOI2015)
  10. 4fsk调制matlab_数字调制解调技术的MATLAB与FPGA实现
  11. Abseil之字符串连接
  12. 如何建立企业员工满意度测评指标体系
  13. miuiv13-redmi-note11TPro-root
  14. b区计算机考研招不满的大学,b区考研招不满的大学 适合调剂的学校有哪些
  15. 《SEM长尾搜索营销策略解密》一一2.2 互联网里的长尾更具影响力
  16. BI 工具常用图表用法
  17. Unity 之 月签到累计签到代码实现(ScriptableObject应用 | DoTween入场动画)
  18. 计网笔记-计网总结-计网复习提纲-第一章.概述
  19. 解决pycharm中中文列表输出'\xe5\xa4\xa7\xe8\x92\x9c'之类的字符串
  20. java nanotime 转秒_[Java] System.nanoTime()返回结果nanoSeconds和seconds之间的转换

热门文章

  1. 老徐FrankXuLei受邀为花旗银行讲授《微软WCF服务分布式开发与SOA架构设计课程》...
  2. DB2数据库指定时间点恢复案例
  3. 超大ISO文件的分卷刻录方法
  4. mcollective的web控制台---mcomaster搭建
  5. Linux的LAMP
  6. 集成Silverlight 2的AJAX框架 Visual WebGui
  7. vsftpd虚拟用户整理
  8. 61. Rotate List
  9. tomcat 后台 getshell
  10. 8.4. Socket 方式