java 队列 Queue 的使用

    xiaoxiao2021-04-19  89

    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 中的类 classArrayBlockingQueue<E>           一个由数组支持的有界阻塞队列。 classConcurrentLinkedQueue<E>           一个基于链接节点的、无界的、线程安全的队列。 classDelayQueue<E extends Delayed>           Delayed 元素的一个无界阻塞队列,只有在延迟期满时才能从中提取元素。 classLinkedBlockingQueue<E>           一个基于已链接节点的、范围任意的 blocking queue。 classPriorityBlockingQueue<E>           一个无界的阻塞队列,它使用与类 PriorityQueue 相同的顺序规则,并且提供了阻塞检索的操作。 classSynchronousQueue<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 迭代器的遍历顺序添加元素。   方法摘要 voidclear()           自动移除此队列中的所有元素。 booleancontains(Object o)           如果此 collection 包含指定的元素,则返回 true。 intdrainTo(Collection<? super E> c)           移除此队列中所有可用的元素,并将它们添加到给定 collection 中。 intdrainTo(Collection<? super E> c, int maxElements)           最多从此队列中移除给定数量的可用元素,并将这些元素添加到给定 collection 中。 Iterator<E>iterator()           返回在此队列中的元素上以正确顺序进行迭代的迭代器。 booleanoffer(E o)           将指定的元素插入到此队列的尾部(如果可能),如果此队列已满,则立即返回。 booleanoffer(E o, long timeout, TimeUnit unit)           将指定的元素插入到此队列的尾部,如果没有可用空间,将等待指定的等待时间(如果有必要)。 Epeek()           检索,但是不移除此队列的头,如果此队列为空,则返回 null。 Epoll()           检索并移除此队列的头,如果此队列为空,则返回 null。 Epoll(long timeout, TimeUnit unit)           检索并移除此队列的头部,如果此队列中没有任何元素,则等待指定等待的时间(如果有必要)。 voidput(E o)           将指定的元素添加到此队列的尾部,如果必要,将等待可用的空间。 intremainingCapacity()           返回在无阻塞的理想情况下(不存在内存或资源约束)此队列能接受的元素数量。 booleanremove(Object o)           从此队列中移除指定元素的一个实例(如果存在)。 intsize()           返回此队列中元素的数量。 Etake()           检索并移除此队列的头部,如果此队列不存在任何元素,则一直等待。 Object[]toArray()           返回包含此 collection 中所有元素的数组。 <T> T[] toArray(T[] a)           返回包含此 collection 中所有元素的数组;返回数组的运行时类型是指定数组的类型。 StringtoString()           返回此 collection 的字符串表示形式。  

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

    转载请注明原文地址: https://ju.6miu.com/read-675992.html

    最新回复(0)