8.4J.U.C-BlockingQueue

Blocking Queue

阻塞队列,是线程安全的,主要用于生产者消费者的场景

在如下情况对阻塞队列进行访问会造成阻塞

  • 当队列满的时候,进行入队操作

  • 当队列空的时候,进行出队操作

使用Blocking Queue时,主要包括3类操作:插入、移除、检查。各一类操作可能有多个方法实现,当方法不能立即执行时,不能的方法现实,表现不同,请根据实际情况选用不同的方法

-

不能立即执行时,会Throws Exception

不能立即执行时,会返回一个特定值

不能立即执行时,操作会被阻塞

不能立即执行时,会被阻塞指定的时间,若超时还未执行或返回一个特定值

Insert

add(o)

offer(o)

put(o)

offer(o,timeout,timeUnit)

Remove

remove(o)

poll()

take()

poll(timeout,timeunit)

Examine

element()

peek(o)

BlockingQueue的一些实现类

  • ArrayBlockingQueue:内部实现为数组的有界阻塞队列,初始化时必须指定其队列大小,且初始化后大小不允许在改变

  • DelayQueue:当超时时,队列中的元素被取出的无界队列

  • LinkedBlockingQueue:初始化时指定队列大小,则为有界的队列,否则为无界的队列,内部实现为列表

  • PriorityBlockingQueue:可以根据排序规则实现具有优先级的无界队列

  • SynchronousQueue:内部仅允许一个元素的队列

Last updated

Was this helpful?