作家
登录

Java阻塞队列实现原理分析

作者: 来源: 2017-04-12 13:05:16 阅读 我要评论

Java 壅塞队列实现道理分析

Java中的壅塞队列接口BlockingQueue持续自Queue接口。

BlockingQueue接口供给了3个添加元素办法:

  • add:添加元素到队列里,添加成功返回true,因为容量满了添加掉败会抛出IllegalStateException异常;
  • offer:添加元素到队列里,添加成功返回true,添加掉败返回false;
  • put:添加元素到队列里,如不雅容量满了会壅塞直到容量不满。

本文以ArrayBlockingQueue和LinkedBlockingQueue为例,分析它们的实现道理。

ArrayBlockingQueue的添加数据办法有add,put,offer这3个办法,总结如下:

ArrayBlockingQueue

ArrayBlockingQueue的道理就是应用一个可重入锁和这个锁生成的两个前提对象进行并发控制(classic two-condition algorithm)。

ArrayBlockingQueue是一个带有长度的壅塞队列,初始化的时刻必须要指定队列长度,且指定长度之后不许可进行修改。

它带有的属性如下:

  1. // 存储队列元素的数组,是个轮回数组 
  2.  
  3. final Object[] items; 
  4.  
  5.   
  6.  
  7. // 拿数据的索引,用于take,poll,peek,remove办法 
  8.  
  9. int takeIndex; 
  10.  
  11.   
  12.  
  13. // 放数据的索引,用于put,offer,add办法 
  14.  
  15. int putIndex; 
  16.  
  17.   
  18.  
  19. // 元素个数 
  20.  
  21. int count
  22.  
  23.   
  24.  
  25. // 可重入锁 
  26.  
  27. final ReentrantLock lock; 
  28.  
  29. // notEmpty前提对象,由lock创建 
  30.  
  31. private final Condition notEmpty; 
  32.  
  33. // notFull前提对象,由lock创建 
  34.  
  35. private final Condition notFull;  
  1. public boolean add(E e) { 
  2.  
  3.     if (offer(e)) 
  4.  
  5.         return true
  6.  
  7.     else 
  8.  
  9.         throw new IllegalStateException("Queue full"); 
  10.  
  11.  

ArrayBlockingQueue有不合的几个数据添加办法,add、offer、put办法。

add办法:

  1. public boolean offer(E e) { 
  2.  
  3.     checkNotNull(e); // 不许可元素为空 
  4.  
  5.     final ReentrantLock lock = this.lock; 
  6.  
  7.     lock.lock(); // 加锁,包管调用offer办法的时刻只有1个线程 
  8.  
  9.     try { 
  10.  
  11.         if (
     1/10    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      大数据在预测性维修中的应用

    核心提示: 大年夜量来自于发念头和其他一些关键部件的监控数据,使得猜测性维修具备了可行性。越来越多的数据的收集和分析对象正在被开辟或者投入应用。大年夜量来自于发念头和其他一些关>>>详细阅读


    本文标题:Java阻塞队列实现原理分析

    地址:http://www.17bianji.com/lsqh/34749.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)