指尖代码 潜水
  • 6发帖数
  • 6主题数
  • 0关注数
  • 0粉丝
开启左侧

ArrayBlockingQueue 入队和出队的源码分析

[复制链接]
指尖代码 发表于 2021-9-14 00:00:00 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
本日我们来聊一聊以数组为数据结构的壅闭队列 ArrayBlockingQueue,它实现了 BlockingQueue 接口,继续了抽象类 AbstractQueue。
BlockingQueue 提供了三个元素入队的方法。
boolean add(E e);boolean offer(E e);void put(E e) throws InterruptedException;
三个元素出队的方法。
E take() throws InterruptedException;E poll(long timeout, TimeUnit unit)        throws InterruptedException;boolean remove(Object o);
一起来看看,ArrayBlockingQueue 是如何实现的吧。
初识

首先看一下 ArrayBlockingQueue 的主要属性和构造函数。
属性

//存放元素final Object[] items; //取元素的索引int takeIndex;//存元素的索引int putIndex;//元素的数量int count;//控制并发的锁final ReentrantLock lock;//非空条件信号量private final Condition notEmpty;//非满条件信号量private final Condition notFull;transient Itrs itrs = null;
从以上属性可以看出:

  • 以数组的方式存放元素。
  • 用 putIndex 和 takeIndex 控制元素入队和出队的索引。
  • 用重入锁控制并发、包管线程的安全。
构造函数


ArrayBlockingQueue 有三个构造函数,此中 <span style="color: #555555; --tt-darkmode-color: #919191;"><span style="background-color: #EEEEEE; --tt-darkmode-bgcolor: #232323;">public ArrayBlockingQueue(int capacity, boolean fair, Collection
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

猜你喜欢
在线客服邮箱
wxcy#wkgb.net

邮箱地址#换为@

Powered by 创意电子 ©2018-现在 专注资源实战分享源码下载站联盟商城