一、什么是ArrayBlockingQueue?
ArrayBlockingQueue是一个阻塞的队列,继承了AbstractBlockingQueue,间接的实现了Queue接口和Collection接口。底层以数组的形式保存数据,所以它是基于数组的阻塞队列。ArrayBlockingQueue是有边界值的,在创建ArrayBlockingQueue时就要确定好该队列的大小,一旦创建,该队列大小不可更改。内部的全局锁是使用的ReentrantLock。
二、使用场景
1.先进先出(队首是最旧的元素;队尾是新添加的元素) 2.有界队列(即初始化时指定的容量,就是队列最大的容量,不会出现扩容,容量满,则阻塞进队操作;容量空,则阻塞出队操作) 3.队列不支持空元素
三、常用的方法(只列举了其中几种)
1.构造方法
capacity:队列初始化大小
fair:表示该队列中的可重入锁是否公平,默认为false
c:添加的集合
ArrayBlockingQueue(int capacity)
ArrayBlockingQueue(int capacity, boolean fair)
ArrayBlockingQueue(int capacity, boolean fair, Collection<? extends E> c)
2.add方法
在队列的尾部添加元素,返回true。当队列满的时候会抛出IllegalStateException异常。
boolean add(E e)
3.offer方法
在队列的尾部添加元素,如果添加成功返回true,否则返回false。
e:添加的元素
timeout:最多等待的时长
unit:时间单位
boolean offer(E e)
boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException
4.put方法
在队列的尾部添加元素,如果队列已满,则会阻塞住,等待队列有空闲位置,该方法可被打断。
void put(E e) throws InterruptedException
5.take方法
获取队列中的元素,如果没有则会被阻塞住。
E take() throws InterruptedException
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。