总所周知,java.util.concurrent包为我们提供了一系列并发处理工具,其中BlockingQueue是我们实现生产者消费者模式较为便利的工具,其主要方法有:
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null 如果有指定时间参数,则会等待该时间段在尝试获取一次
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素
参考原文链接:https://blog.csdn.net/u012050154/article/details/60572567
而我在最近一次编程中,看到其他博客的方法介绍,其把remove与poll弄混了,导致我企图通过异常检测退出任务循环时,导致无法结束任务(它会一直返回null?但idea调试时又显示该任务已结束(线程池线程均已空闲状态),这也是我百思不得其解的地方),进而导致我无法获取结果。。。这个故事告诉我,要使用一个新的API时不仅看看前辈们的使用经验,最好自己也看下源代码或API文档(无奈英语太差吧)。