阻塞队列(BlockingQueue)
介绍:java.lang.concurrent(Java并发工具包)下的一个接口
使用场景:通常用于一个线程生产对象,而另外一个线程消费这些对象的场景
文章目录
引言
本文旨在记录阻塞队列的一些特性、用法、使用场景等,随着学习的不断深入,后续会深入研究
提示:BlockingQueue和它的诸多实现
BlockingQueue
从一种角度来划分,队列分为两种:阻塞队列、非阻塞队列,今天只研究阻塞队列。BlockingQueue继承自Queue,又提供了几种不同使用场景的阻塞队列。因此,BlockingQueue是阻塞队列的规范
方法介绍:
Exception | Special Value | Blocking | TimeOut | |
---|---|---|---|---|
enqueue | add(E e) | offer(E e) | put(E e) | offer(E e, long timeout, TimeUnit unit) |
dequeue | remove(Object o) | poll() | take() | poll(long timeout, TimeUnit unit) |
checkIndex | element() | peek() |
Exception:如果当前操作无法立即执行,则抛出异常
Special Value:如果可以在不违反容量限制的情况下立即将指定的元素插入到此队列中或从此队列中移除,则返回特定值(通常为true/false)。注意:poll()方法并非BlockingQueue的方法,而是继承自Queue接口,如果队列不为空,则返回列首的元素,如果队列为空,则返回null;element()、peek()继承自Queue,特点是检索但不会删除列首元素,二者的区别在于element()会在队列为null时抛出异常,而peek()不会抛异常,会返回null
Blocking:如果入队或出队操作因队列长度限制无法立即执行,则线程阻塞,直到达到条件执行
TimeOut:如果当前操作无法立即执行,该方法调用将会发生阻塞,直到能够执行,但等待时间不会超过给定值。返回一个特定值以告知该操作是否成功(典型的是 true / false)
ArrayBlockingQueue(数组阻塞队列)
特点:有界阻塞队列,底层是数组,先进先出
介绍