java 队列 Queue 的使用

时间:2022-02-25 17:37:29

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()取出元素,都会等待,线程阻塞。


实现 Queuejava.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,

Collection
<? extends
E
> c)

          创建一个具有给定的(固定)容量和指定访问策略的 ArrayBlockingQueue,它最初包含给定 collection 的元素,并以 collection 迭代器的遍历顺序添加元素。
 
方法摘要
 void clear()
          自动移除此队列中的所有元素。
 boolean contains(Object o)
          如果此 collection 包含指定的元素,则返回 true
 int drainTo(Collection<? super

E
> c)

          移除此队列中所有可用的元素,并将它们添加到给定 collection 中。
 int drainTo(Collection<? super

E
> c, int maxElements)

          最多从此队列中移除给定数量的可用元素,并将这些元素添加到给定 collection 中。
 Iterator<E> iterator()
          返回在此队列中的元素上以正确顺序进行迭代的迭代器。
 boolean offer(E o)
          将指定的元素插入到此队列的尾部(如果可能),如果此队列已满,则立即返回。
 boolean offer(E o,
long timeout,
TimeUnit
 unit)

          将指定的元素插入到此队列的尾部,如果没有可用空间,将等待指定的等待时间(如果有必要)。
 E peek()
          检索,但是不移除此队列的头,如果此队列为空,则返回 null
 E poll()
          检索并移除此队列的头,如果此队列为空,则返回 null
 E poll(long timeout,

TimeUnit
 unit)

          检索并移除此队列的头部,如果此队列中没有任何元素,则等待指定等待的时间(如果有必要)。
 void put(E o)
          将指定的元素添加到此队列的尾部,如果必要,将等待可用的空间。
 int remainingCapacity()
          返回在无阻塞的理想情况下(不存在内存或资源约束)此队列能接受的元素数量。
 boolean remove(Object o)
          从此队列中移除指定元素的一个实例(如果存在)。
 int size()
          返回此队列中元素的数量。
 E take()
          检索并移除此队列的头部,如果此队列不存在任何元素,则一直等待。
 Object[] toArray()
          返回包含此 collection 中所有元素的数组。
<T> T[]
toArray(T[] a)
          返回包含此 collection 中所有元素的数组;返回数组的运行时类型是指定数组的类型。
 String toString()
          返回此 collection 的字符串表示形式。
 

读API是一个很了不起的能力~