阻塞队列是指一个支持两个附加操作的队列,这两个附加操作支持阻塞地插入和移除的方法。
• 支持阻塞地插入方法,队列满时,队列会阻塞插入元素的线程,直到队列有空位;
• 支持阻塞地移除方法,当队列为空时,队列会阻塞移除元素的线程,直到队列有元素。
阻塞队列一般用于生产-消费的场景,插入和移除操作的4种处理方法如下:
• 抛出异常:当队列满/空时,再往队列添加/移除元素,就会抛出异常;
• 返回特殊值:当队列插入元素时,会返回插入是否成功的布尔值,当移除元素时,则从队列取回一个元素,不存在返回NULL。
• 一直阻塞:当队列满时,再往队列put元素,队列会一直阻塞生产线程直到队列可用或响应中断退出;当队列为空时,如果从队列take出一个元素,则会一直阻塞消费线程直到队列不为空。
• 超时退出:当队列满/空时,如果添加/移除一个元素,则会线程阻塞到指定的时间后退出。
JDK6一共提供了6种阻塞队列,以应对各种场景的生产-消息模型,以下是这6种阻塞队列的类关系图: