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):从此队列中移除指定元素的单个实例(如果存在)。

    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:一个由链表结构组成的双向阻塞队列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值