關於執行緒池任務報錯的處理與理解

2021-10-24 07:59:33 字數 580 閱讀 2340

說說我對第一篇文章的理解:

業務中線程池裡的任務應該是在不斷迴圈消費資料,且執行緒池是單執行緒的.該執行緒池的任務對資料做簡單處理就交給另乙個執行緒池做處理.

任務的**不能報錯,否則會中斷並結束任務.任務一直在,執行緒池就不會走到waiting,而是runnable狀態.

若**報錯,執行緒池的processworkexit方法會刪除該任務,並加入新的任務,而新的任務是null.不會執行任何業務邏輯.所以執行緒池一直處於waiting狀態.

任務被刪除後,就沒有再消費資料,因此資料庫中的資料一直沒有更新,而生產者的資料佇列一直積累到滿為止.

解決辦法就是使runnable任務不報錯,從而能一直不斷地處理訊息.

對於第二篇文章,我想說的是,重點在於任務報錯後,就沒有任務去處理資料了,而不在於waiting狀態.不論是否報錯,任務佇列沒有任務了,執行緒池都會走到waiting狀態.

關於執行緒池的理解

corepoolsize,maximumpoolsize 執行緒中永許活動的最大執行緒數 workqueue 任務佇列 time,rejectedexecutionhandler 拒絕策略 1.小於corepoolsize就會新起 2.大於corepoolsize 新增的先加入到workqueue中...

關於Tomcat的執行緒池的理解

預設配置下,tomcat 會為每個聯結器建立乙個繫結的執行緒池 最大執行緒數 200 在大多數情況下你不需要改這個配置 除非增大最大執行緒數以滿足高負載需要 但是 tomcat 喜歡在每個工作者執行緒的 thread local 上下文快取一些諸如 pagecontext 以及標籤快取的物件。正因如...

通過執行緒池處理多工

每隔1000ms去查詢一次待辦任務 timer.schedule new timertask for final invoiceonlinerequestinfodo requestinfodo invoiceonlinerequestinfodolist try catch exception e...