ArrayBlockingQueue知识点有哪些
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,这期内容当中小编将会给大家带来有关ArrayBlockingQueue知识点有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。JDK1.8版本,整理有关Array
千家信息网最后更新 2025年02月06日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安全错误
数据库的锁怎样保障安全
网络安全顶层设计规划不健全
我们应该注意网络安全英文
怎么清除苹果8云端数据库
重庆奉节生鲜信息软件开发
dell r220服务器
静安区网络技术咨询以客为尊
网络安全包括哪三层
aps数据库
按照时间点恢复数据库
西藏云缇服务器
服务器cmd命令
魔法王座服务器
网络安全哪个专业更好
认证数据库连接失败的原因
网络安全法 59条
云南渐飞网络技术
计算机网络技术的发展过程
网络安全贺卡怎么做
联通 网络技术
网络安全周活动策划案
西安交通大学数据库期末考试
网络安全有问题 连不上网
桦甸市天气预报软件开发
数据库一对一如何建立
服务器拒绝访问的原因安全狗
入驻国家网络安全人才与创新基地
云南渐飞网络技术
山东软件开发网站
国家对网络安全产品的认证
四级数据库工程师样题