类 ArrayBlockingQueue<E>(一个由数组支持的有界阻塞队列。)
来源:互联网 发布:幸运抽奖软件作弊 编辑:程序博客网 时间:2024/06/13 15:24
- 类型参数:
E
- 在此 collection 中保持的元素类型
- 所有已实现的接口:
- Serializable,Iterable<E>, Collection<E>, BlockingQueue<E>,Queue<E>
public class ArrayBlockingQueue<E>
- extends AbstractQueue<E>
- implements BlockingQueue<E>, Serializable
一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。队列的头部 是在队列中存在时间最长的元素。队列的尾部 是在队列中存在时间最短的元素。新元素插入到队列的尾部,队列获取操作则是从队列头部开始获得元素。
这是一个典型的“有界缓存区”,固定大小的数组在其中保持生产者插入的元素和使用者提取的元素。一旦创建了这样的缓存区,就不能再增加其容量。试图向已满队列中放入元素会导致操作受阻塞;试图从空队列中提取元素将导致类似阻塞。
此类支持对等待的生产者线程和使用者线程进行排序的可选公平策略。默认情况下,不保证是这种排序。然而,通过将公平性 (fairness) 设置为true 而构造的队列允许按照 FIFO 顺序访问线程。公平性通常会降低吞吐量,但也减少了可变性和避免了“不平衡性”。
此类及其迭代器实现了 Collection
和 Iterator
接口的所有可选 方法。
此类是 Java Collections Framework 的成员。
- 从以下版本开始:
- 1.5
- 另请参见:
- 序列化表格
ArrayBlockingQueue(int capacity)
创建一个带有给定的(固定)容量和默认访问策略的 ArrayBlockingQueue。
ArrayBlockingQueue(int capacity, boolean fair)
创建一个具有给定的(固定)容量和指定访问策略的 ArrayBlockingQueue。
ArrayBlockingQueue(int capacity, boolean fair,Collection<? extends E> c)
创建一个具有给定的(固定)容量和指定访问策略的 ArrayBlockingQueue,它最初包含给定 collection 的元素,并以 collection 迭代器的遍历顺序添加元素。
boolean
add(E e)
将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量),在成功时返回 true,如果此队列已满,则抛出 IllegalStateException。
void
clear()
自动移除此队列中的所有元素。
boolean
contains(Object o)
如果此队列包含指定的元素,则返回 true。
int
drainTo(Collection<? superE> c)
移除此队列中所有可用的元素,并将它们添加到给定 collection 中。
int
drainTo(Collection<? superE> c, int maxElements)
最多从此队列中移除给定数量的可用元素,并将这些元素添加到给定 collection 中。
Iterator<E>
iterator()
返回在此队列中的元素上按适当顺序进行迭代的迭代器。
boolean
offer(E e)
将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量),在成功时返回 true,如果此队列已满,则返回 false。
boolean
offer(E e, long timeout,TimeUnit unit)
将指定的元素插入此队列的尾部,如果该队列已满,则在到达指定的等待时间之前等待可用的空间。
E
peek()
获取但不移除此队列的头;如果此队列为空,则返回 null。
E
poll()
获取并移除此队列的头,如果此队列为空,则返回 null。
E
poll(long timeout,TimeUnit unit)
获取并移除此队列的头部,在指定的等待时间前等待可用的元素(如果有必要)。
void
put(E e)
将指定的元素插入此队列的尾部,如果该队列已满,则等待可用的空间。
int
remainingCapacity()
返回在无阻塞的理想情况下(不存在内存或资源约束)此队列能接受的其他元素数量。
boolean
remove(Object o)
从此队列中移除指定元素的单个实例(如果存在)。
int
size()
返回此队列中元素的数量。
E
take()
获取并移除此队列的头部,在元素变得可用之前一直等待(如果有必要)。
Object[]
toArray()
返回一个按适当顺序包含此队列中所有元素的数组。
<T> T[]
toArray(T[] a)
返回一个按适当顺序包含此队列中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。
String
toString()
返回此 collection 的字符串表示形式。
addAll,element, remove
containsAll,isEmpty, removeAll,retainAll
clone,equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
element,remove
addAll,containsAll, equals,hashCode, isEmpty, removeAll, retainAll
示例代码:
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class Test10050 {
public static void main(String[] args) {
final Bussiness1 bussiness=new Bussiness1();
new Thread(new Runnable() {
public void run() {
for(int i=1;i<51;i++){
bussiness.sub(i);
}
}
}).start();
new Thread(new Runnable() {
public void run() {
for(int i=1;i<51;i++){
bussiness.main(i);
}
}
}).start();
}
}
class Bussiness1{
BlockingQueue<Integer> arrayBlock1=new ArrayBlockingQueue<Integer>(1);
BlockingQueue<Integer> arrayBlock2=new ArrayBlockingQueue<Integer>(1);
{
try {
arrayBlock2.put(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void sub(int i){
try {
arrayBlock1.put(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int j=1;j<11;j++){
System.out.println("子线程第"+i+"次循环: 次数为"+j);
}
try {
arrayBlock2.take();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void main(int i){
try {
arrayBlock2.put(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int j=1;j<101;j++){
System.out.println("主线程第"+i+"次循环: 次数为"+j);
}
try {
arrayBlock1.take();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- 类 ArrayBlockingQueue<E>(一个由数组支持的有界阻塞队列。)
- 数组阻塞队列 ArrayBlockingQueue
- 数组阻塞队列 ArrayBlockingQueue
- 阻塞队列(ArrayBlockingQueue)
- 二 : ArrayBlockingQueue 数组阻塞队列
- 一个由阻塞队列引发的类死锁案例
- 可阻塞的队列——ArrayBlockingQueue
- Java中的阻塞队列ArrayBlockingQueue的使用
- ArrayBlockingQueue阻塞队列的使用示例
- 一心多用多线程-阻塞队列(1)-ArrayBlockingQueue
- 阻塞队列使用---ArrayBlockingQueue
- JAVA 阻塞队列 ArrayBlockingQueue
- 阻塞队列之ArrayBlockingQueue
- 阻塞队列ArrayBlockingQueue说明
- 阻塞队列之ArrayBlockingQueue
- 阻塞队列ArrayBlockingQueue
- 多线程Demo-ArrayBlockingQueue阻塞队列
- JAVA阻塞队列之ArrayBlockingQueue
- iOS给背景添加点击事件
- Android SDK更新以及ADT更新出现问题的解决办法
- C# Word 标题设置大纲级别和自动生成目录
- URAL1069
- 内存操作流
- 类 ArrayBlockingQueue<E>(一个由数组支持的有界阻塞队列。)
- jquery
- hdu4634 搜索+状态压缩
- cocos2d-x 消类游戏,类似Diamond dash 设计
- man info 命令
- NYOJ 吝啬的国度
- 公司版STM32工作原理
- 《算法竞赛-训练指南》第一章-1.24_pre二维矩阵中的最小连续矩阵和
- MFC学习之 重载OnEraseBkgnd()