記一次多線程錯誤的坑

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章