BlockingQueue 简单学习

队列的有界无界:

有界:当线程数大于队列线程数时,若在指定延迟时间后返回为false,则阻塞线程。

无界:队列无线程数限制,若资源过多直至CPU资源耗尽

他们都是阻塞队列,都继承自BlockingQueue接口

     

   ArrayBlockingQueue:数组式有界阻塞队列:其内部维护了一个数组,实现有:

来自:java api         

ArrayBlockingQueue(int capacity)
创建指定大小有界队列
ArrayBlockingQueue(int capacity, boolean fair)
创建指定大小,指定锁策略是否为公平锁

ArrayBlockingQueue(int capacity, boolean fair, Collection<? extends E> c)

创建一个指定大小,指定锁策略,指定初始化集合的有界队列

ArrayBlockingQueue提供了如下使用方法:

来自  java  api

booleanadd(E e)
添加到队列尾部,若队列满则抛出异常 队列满,阻塞队列
voidclear()
原子性的删除队列所有元素
booleancontains(Object o)
如果队列存在指定元素,返回true
intdrainTo(Collection<? super E> c)
删除队列所有元素,并添加到给定的集合
intdrainTo(Collection<? super E> c, int maxElements)
删除给定大小的元素到给定的集合
Iterator<E>iterator()
迭代队列中的元素
booleanoffer(E e)
若队列未满则添加到队列尾部,否则返回false,不阻塞与add不同offer不抛出异常  queue full
booleanoffer(E e, long timeout, TimeUnit unit)
若队列满则等待给定时间,若超时队列任然满则返回false。
Epeek()
检索队列,但不删除队列 首元素,若为null 则返回空
Epoll()
检索并删除队列首元素,若为null则返回空
Epoll(long timeout, TimeUnit unit)
等待指定时间检索删除队列首元素 
voidput(E e)
在队列尾部插入元素,若队列满则阻塞等待
intremainingCapacity()
返回队列最大值(可存储元素的限制数)
booleanremove(Object o)
从队列中删除给定元素,若存在的话
intsize()
返回队列元素大小
Etake()
若队列不为空,则获取队列首元素并删除。若队列为空则阻塞等待
Object[]toArray()
顺序返回该队列中的元素为数组
<T> T[]toArray(T[] a)
返回指定数组类型元素 数组
StringtoString()
返回字符串形式

部分演示:


LinkedBlockingQueue:内部由链表实现的阻塞队列,实现有:

来自 java api

LinkedBlockingQueue()
创建一个具有默认最大容量的队列 Integer.MAX_VALUE.
LinkedBlockingQueue(Collection<? extends E> c)
创建一个给定初始化集合默认最大容量 Integer.MAX_VALUE, 的阻塞队列
LinkedBlockingQueue(int capacity)
创建一个给定大小的队列

方法同ArrayBlockingQueue一致。

区别:

       ArrayBlockingQueue:其 读 写锁未分离。LinkedBlockingQueue实现了读 写锁分离(putLock,takeLock)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值