Java并发容器之阻塞队列简介

    阻塞队列(BlockingQueue)是支持两个附加操作的队列,这两个操作支持阻塞的插入和移除方法。

    1)支持阻塞的插入方法,当队列满时,队列会阻塞插入元素的线程,直到队列不满。

    2)支持阻塞的移除方式,当队列为空时,获取元素的线程会等待直到队列不为空。

    几种插入、移除方法比较:

    插入方法:

    1)add(e):将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量),在成功时返回 true,如果此队列已满,则抛出 IllegalStateException

    2)offer(e):将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量),在成功时返回 true,如果此队列已满,则返回 false。此方法通常要优于add(e) 方法,后者可能无法插入元素,而只是抛出一个异常。

    3)put(e):将指定的元素插入此队列的尾部,如果该队列已满,则等待可用的空间。

    4)offer(e,timeout,unit):将指定的元素插入此队列的尾部,如果该队列已满,则在到达指定的等待时间之前等待可用的空间。

    移除方法:

    1)remove(e):从此队列中移除指定元素的单个实例(如果存在)。

扫描二维码关注公众号,回复: 1484583 查看本文章

    2)poll():获取并移除此队列的头,如果此队列为空,则返回 null

    3)take():获取并移除此队列的头部,在元素变得可用之前一直等待(如果有必要)。

    Java中的阻塞队列

    JDK 7里提供了7个阻塞队列,如下:

    1)ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列。

    2)LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列。

    3)PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列。

    4)DelayQueue:一个使用优先级队列实现的无界阻塞队列,支持延时获取元素,只有在延迟期满时才能从队列中提取元素。

    5)SynchronousQueue:一个不储存元素的阻塞队列,每一个put操作必须等待一个take操作。

    6)LinkedTransferQueue:一个链表结构组成的无界阻塞队列,可以让put()线程阻塞,直到有take()线程取走该元素。

    7)LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。

猜你喜欢

转载自blog.csdn.net/u010771890/article/details/73826025