ArrayBlockingQueue知识点有哪些
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这期内容当中小编将会给大家带来有关ArrayBlockingQueue知识点有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。JDK1.8版本,整理有关Array
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
psn账号服务器
数据库对象是指数据表吗
stata如何筛选数据库
计算机三级网络技术考点笔记
数据库如何启动监听
阿里云服务器连接记录
区委网络安全办公室
爱课堂服务器地址错误怎么解决
软件开发访问总结报告
配置web服务器dns主机
软件开发底层学什么
圣魂纷争切换服务器
山西新华互联网科技学院
维护我国网络安全提出建议
研究生应该怎样做好网络安全
服务器会不会被动修改参数
软件开发的能做运维么
域名访问服务器 报错安全
嘉善景瑞网络技术
数据库技术适合哪些专业
服务器管理器属性命令
完整描述数据库的三个要素
java 反射写数据库
数据库什么是总计查询
dhcp服务器详细
三本软件开发专业好不好
北仑计算机软件开发流程
打印机网络服务器哪款好用
抠像软件开发团队
餐饮软件数据库怎么发