java 队列 ArrayBlockingQueue 的使用
demo:
public class TestQueue {
private static ArrayBlockingQueue<Integer> q=new ArrayBlockingQueue<Integer>(10);
public static void main(String[] args) {
Testpoll tp=new Testpoll();
Thread t=new Thread(tp);
t.start();
System.out.println("取出线程启动完毕");
System.out.println("开始添加元素");
for(int i=0;i<20;i++){
try {
q.put(i);
System.out.println("成功添加了元素:"+i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
static class Testpoll implements Runnable{
public void run() {
for(int i=0;i<20;i++){
try {
System.out.println("成功取出元素:"+q.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
其中put()添加元素,与take()取出元素,都会等待,线程阻塞。
实现 Queue 的 java.util.concurrent 中的类 | |
---|---|
class |
ArrayBlockingQueue<E> 一个由数组支持的有界阻塞队列。 |
class |
ConcurrentLinkedQueue<E> 一个基于链接节点的、*的、线程安全的队列。 |
class |
DelayQueue<E extends Delayed> Delayed 元素的一个*阻塞队列,只有在延迟期满时才能从中提取元素。 |
class |
LinkedBlockingQueue<E> 一个基于已链接节点的、范围任意的 blocking queue。 |
class |
PriorityBlockingQueue<E> 一个*的阻塞队列,它使用与类 PriorityQueue 相同的顺序规则,并且提供了阻塞检索的操作。 |
class |
SynchronousQueue<E> 一种阻塞队列,其中每个put 必须等待一个 take,反之亦然。 |
构造方法摘要 | |
---|---|
ArrayBlockingQueue(int capacity) 创建一个带有给定的(固定)容量和默认访问策略的 ArrayBlockingQueue。 |
|
ArrayBlockingQueue(int capacity, boolean fair) 创建一个具有给定的(固定)容量和指定访问策略的 ArrayBlockingQueue。 |
|
ArrayBlockingQueue(int capacity, boolean fair, 创建一个具有给定的(固定)容量和指定访问策略的 ArrayBlockingQueue,它最初包含给定 collection 的元素,并以 collection 迭代器的遍历顺序添加元素。 |
方法摘要 | ||
---|---|---|
void |
clear() 自动移除此队列中的所有元素。 |
|
boolean |
contains(Object o) 如果此 collection 包含指定的元素,则返回 true。 |
|
int |
drainTo(Collection<? super 移除此队列中所有可用的元素,并将它们添加到给定 collection 中。 |
|
int |
drainTo(Collection<? super 最多从此队列中移除给定数量的可用元素,并将这些元素添加到给定 collection 中。 |
|
Iterator<E> |
iterator() 返回在此队列中的元素上以正确顺序进行迭代的迭代器。 |
|
boolean |
offer(E o) 将指定的元素插入到此队列的尾部(如果可能),如果此队列已满,则立即返回。 |
|
boolean |
offer(E o, 将指定的元素插入到此队列的尾部,如果没有可用空间,将等待指定的等待时间(如果有必要)。 |
|
E |
peek() 检索,但是不移除此队列的头,如果此队列为空,则返回 null。 |
|
E |
poll() 检索并移除此队列的头,如果此队列为空,则返回 null。 |
|
E |
poll(long timeout, 检索并移除此队列的头部,如果此队列中没有任何元素,则等待指定等待的时间(如果有必要)。 |
|
void |
put(E o) 将指定的元素添加到此队列的尾部,如果必要,将等待可用的空间。 |
|
int |
remainingCapacity() 返回在无阻塞的理想情况下(不存在内存或资源约束)此队列能接受的元素数量。 |
|
boolean |
remove(Object o) 从此队列中移除指定元素的一个实例(如果存在)。 |
|
int |
size() 返回此队列中元素的数量。 |
|
E |
take() 检索并移除此队列的头部,如果此队列不存在任何元素,则一直等待。 |
|
Object[] |
toArray() 返回包含此 collection 中所有元素的数组。 |
|
|
toArray(T[] a) 返回包含此 collection 中所有元素的数组;返回数组的运行时类型是指定数组的类型。 |
|
String |
toString() 返回此 collection 的字符串表示形式。 |
读API是一个很了不起的能力~