ArrayBlockingQueue知识点有哪些
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这期内容当中小编将会给大家带来有关ArrayBlockingQueue知识点有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。JDK1.8版本,整理有关Array
千家信息网最后更新 2026年11月02日ArrayBlockingQueue知识点有哪些
这期内容当中小编将会给大家带来有关ArrayBlockingQueue知识点有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
JDK1.8版本,整理有关ArrayBlockingQueue的知识点,并对其中主要的方法进行分析
特点
1.有界队列(基于数组实现的)
2.先进先出
3.如果队列满了,put操作会阻塞;如果队列空了,take操作会阻塞。
4.支持公平或者非公平的策略(因为内部是使用ReentrantLock来实现阻塞的),公平策略(降低吞吐量)
5.使用经典的双条件算法来保证阻塞功能
6.写数据和消费数据使用同一把锁(这就导致写数据和消费数据并不能真正的并发)
主要方法
1.add(),offer(),put()方法
三者都是插入方法,add()时如果队列满了,会抛出异常;offer()如果队列满了,返回false;put方法,如果队列满了,阻塞等待
add()方法:public boolean add(E e) { return super.add(e);//调用父类的add(),父类中又调用了offer()方法,所以最终还是调用offer()方法 }offer()方法public boolean offer(E e) { checkNotNull(e); //判断元素是否为空 final ReentrantLock lock = this.lock; lock.lock();//获取锁 try { if (count == items.length) //判断队列是否已满,如果满了 直接返回 false return false; else { enqueue(e); //放入队列中 return true; } } finally { lock.unlock(); //释放锁 } }put()方法 public void put(E e) throws InterruptedException { checkNotNull(e);//检查元素是否为空 final ReentrantLock lock = this.lock; lock.lockInterruptibly();//获取锁 try { while (count == items.length)//判断队列是否已满,如果满了,阻塞当前线程 notFull.await(); //等待 enqueue(e); //插入队列 } finally { lock.unlock(); // 释放锁 } } 2.poll(),take(),peek()方法
三者都是元素出队方法
1.peek()取出元素,但不会删除元素
2.poll()取出元素,并删除元素
3.take()取出元素,并且删除,如果队列为空的话,阻塞当前操作
1.peek()方法 public E peek() { final ReentrantLock lock = this.lock; lock.lock(); //获取锁 try { return itemAt(takeIndex); // 获取元素 } finally { lock.unlock(); //释放锁 } }2.poll()public E poll() { final ReentrantLock lock = this.lock; lock.lock();//获取锁 try { return (count == 0) ? null : dequeue(); //获取元素,并且删除元素 } finally { lock.unlock();//释放锁 } }3.take() public E take() throws InterruptedException { final ReentrantLock lock = this.lock; lock.lockInterruptibly();//获取锁 try { while (count == 0) //队列为空阻塞 notEmpty.await(); return dequeue(); //获取元素,并删除 } finally { lock.unlock(); //释放锁 } }3.remove()方法
remove()移除元素,使用循环的方式移除
1.remove()方法public boolean remove(Object o) { if (o == null) return false; //这个地方为什么不能直接抛异常 final Object[] items = this.items; final ReentrantLock lock = this.lock; lock.lock();//获取锁 try { if (count > 0) { final int putIndex = this.putIndex; int i = takeIndex; do { //循环,直到找到要删除的元素 if (o.equals(items[i])) { removeAt(i); return true; } if (++i == items.length) i = 0; } while (i != putIndex); } return false; } finally { lock.unlock(); //释放锁 } }上述就是小编为大家分享的ArrayBlockingQueue知识点有哪些了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
方法
元素
队列
阻塞
知识
数据
知识点
分析
内容
策略
循环
有关
消费
专业
中小
先进
内容丰富
功能
吞吐量
地方
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技
互联网络科技
互联网高科技
互联网科技垄断
关于新基建和互联网科技
科技制造互联网公司
广西互联网科技公司
郑州华宇互联网科技
深圳艾佳互联网科技
互联网科技博客
银川新华互联网科技职业技术培训学校图片
互联网时代科技改变生活
米聚互联网科技南京有限公司排面
广州新华互联网科技学校电竞方面
互联网科技圈年度人物
国大互联网教育科技有限公司薪资
梅州GM互联网络科技有限公司
信承诺互联网科技有限公司
第三届互联网大会安防黑科技
东风日产互联网科技公司叫什么
互联网科技有限公司
互联网科技的未来发展
互联网高科技企业
互联网科技大会
互联网金融科技公司干啥的
南平创想时代互联网科技有限公司
互联网科技产业特征
玉溪互联网科技怎么选
互联网保险科技创业
云鲸互联网络科技有限公司