ArrayBlockingQueue的删除数据办法有poll,take,remove这3个办法,总结如下:
poll办法对于队列为空的情况,返回null,不然返回队列头部元素。
remove办法取的元素是基于对象的下标值,删除成功返回true,不然返回false。
poll办法和remove办法不会壅塞线程。
take办法对于队列为空的情况,会壅塞并挂起当前哨程,直到稀有据参加到队列中。
这3个办法内部都邑调用notFull.signal办法通知正在等待队列满情况下的壅塞线程。
LinkedBlockingQueue
LinkedBlockingQueue是一个应用链表完成队列操作的壅塞队列。链表是单向链表,而不是双向链表。
内部应用放锁和拿锁,这两个锁实现壅塞(“two lock queue” algorithm)。
它带有的属性如下:
- // 容量大年夜小
- private final int capacity;
- // 元素个数,因为有2个锁,存在竞态前提,应用AtomicInteger
- private final AtomicInteger count = new AtomicInteger(0);
- // 头结点
- private transient Node<E> head;
- // 尾节点
- private transient Node<E> last;
- // 拿锁
- private final ReentrantLock takeLock = new ReentrantLock();
- // 拿锁的前提对象
- private final Condition notEmpty = takeLock.newCondition();
- // 放锁
推荐阅读
核心提示: 大年夜量来自于发念头和其他一些关键部件的监控数据,使得猜测性维修具备了可行性。越来越多的数据的收集和分析对象正在被开辟或者投入应用。大年夜量来自于发念头和其他一些关>>>详细阅读
本文标题:Java阻塞队列实现原理分析
地址:http://www.17bianji.com/lsqh/34749.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示