insert办法如下:
- private void insert(E x) {
- items[putIndex] = x; // 元素添加到数组里
- putIndex = inc(putIndex); // 放数据索引+1,当索引满了变成0
- ++count; // 元素个数+1
- notEmpty.signal(); // 应用前提对象notEmpty通知,比如应用take办法的时刻队列琅绫腔稀有据,被壅塞。这个时刻队列insert了一条数据,须要调用signal进行通知
- }
put办法:
- public void put(E e) throws InterruptedException {
- checkNotNull(e); // 不许可元素为空
- final ReentrantLock lock = this.lock;
- lock.lockInterruptibly(); // 加锁,包管调用put办法的时刻只有1个线程
- try {
- while (count == items.length) // 如不雅队列满了,壅塞当前哨程,并参加到前提对象notFull的等待队列里
- notFull.await(); // 线程壅塞并被挂起,同时释放锁
- insert(e); // 调用insert办法
- } finally {
- lock.unlock(); // 释放锁,让其他线程可声调用put办法
- }
- }
数据的添加
add办法内部调用offer办法,如不雅队列满了,抛出IllegalStateException异常,不然返回true
offer办法如不雅队列满了,返回false,不然返回true
推荐阅读
核心提示: 大年夜量来自于发念头和其他一些关键部件的监控数据,使得猜测性维修具备了可行性。越来越多的数据的收集和分析对象正在被开辟或者投入应用。大年夜量来自于发念头和其他一些关>>>详细阅读
本文标题:Java阻塞队列实现原理分析
地址:http://www.17bianji.com/lsqh/34749.html
1/2 1

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