BlockingQueue接口方法说明

BolckingQueue接口

BlockingQueue 是juc下所有队列的接口,这些队列包括:

  • ArrayBolckingQueue
  • DelayedWorkQueue
  • DelayQueue
  • FariBlockQueue
  • LinkedBlockingQueue
  • PriorityBolckingQueue
  • SychronousQueue

先来熟悉一下相关的接口方法标准


  • boolean add(E e)
    从函数说明可以看出,这个方法是立即返回操作结果的,如果是在有界队列,队列满的时候,是直接抛出IllegalStateException异常的,所以建议在有界队列的时候,使用offer()

  • boolean offer(E e) 方法说明又强调了一次,如果是有界队列,这个比add方法好。。我知道了。。如果没有空间了,会一直阻塞,直到抛出异常

  • 还有另外一个offer方法
    boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException;
    这个offer方法是可设置等待时间,并且是可中断的,成功入队返回true,超时失败false

  • put(E e) 队列满的时候一直等待直到中断异常

  • E take() 方法,返回检索获取到队列头的元素并且移除他,如果没有可获取的元素,还是一直傻等,直到抛出中断异常

  • E poll(long timeout, TimeUnit unit)方法,等待一个指定的时间段,如果在等待过程中中断了,抛出中断异常,如果等待时间还没有获取到,返回null

总结如下:

put(E e)和take()一个是入队一个出对,是会一直傻等直到抛出中断异常的
offer(E e, Long timeout, TimeUnit unit)和poll(long timeout, TimeUnit unit)是在一个时间段内等,不会一直傻等的

你可能感兴趣的:(BlockingQueue接口方法说明)