總所周知,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文檔(無奈英語太差吧)。