作家
登录

Java阻塞队列实现原理分析

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

  •  
  •             if (nexti != putIndex) { 
  •  
  •                 items[i] = items[nexti]; 
  •  
  •                 i = nexti; 
  •  
  •             } else { 
  •  
  •                 items[i] = null
  •  
  •                 putIndex = i; 
  •  
  •                 break; 
  •  
  •             } 
  •  
  •         } 
  •  
  •     } 
  •  
  •     --count; // 元素个数-1 
  •  
  •     notFull.signal(); // 应用前提对象notFull通知,比如应用put办法放数据的时刻队列已满,被壅塞。这个时刻花费了一条数据,队列没满了,就须要调用signal进行通知  
  •  
  •  
  • ArrayBlockingQueue的删除数据办法有poll,take,remove这3个办法,总结如下:

    poll办法对于队列为空的情况,返回null,不然返回队列头部元素。

    remove办法取的元素是基于对象的下标值,删除成功返回true,不然返回false。

    poll办法和remove办法不会壅塞线程。

    take办法对于队列为空的情况,会壅塞并挂起当前哨程,直到稀有据参加到队列中。

    这3个办法内部都邑调用notFull.signal办法通知正在等待队列满情况下的壅塞线程。

    LinkedBlockingQueue

    LinkedBlockingQueue是一个应用链表完成队列操作的壅塞队列。链表是单向链表,而不是双向链表。

    内部应用放锁和拿锁,这两个锁实现壅塞(“two lock queue” algorithm)。

    它带有的属性如下:

    1. // 容量大年夜小 
    2.  
    3. private final int capacity; 
    4.  
    5.   
    6.  
    7. // 元素个数,因为有2个锁,存在竞态前提,应用AtomicInteger 
    8.  
    9. private final AtomicInteger count = new AtomicInteger(0); 
    10.  
    11.   
    12.  
    13. // 头结点 
    14.  
    15. private transient Node<E> head; 
    16.  
    17.   
    18.  
    19. // 尾节点 
    20.  
    21. private transient Node<E> last
    22.  
    23.   
    24.  
    25. // 拿锁 
    26.  
    27. private final ReentrantLock takeLock = new ReentrantLock(); 
    28.  
    29.   
    30.  
    31. // 拿锁的前提对象 
    32.  
    33. private final Condition notEmpty = takeLock.newCondition(); 
    34.  
    35.   
    36.  
    37. // 放锁 
    38.  

        推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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