因為篇幅太長所以分兩篇部落格進行說明,本文算是對《執行緒池提交任務和執行任務原始碼解析》的補充
第一篇部落格《執行緒池提交任務和執行任務原始碼解析》—》
繼續execute()方法的說明
public
void
execute
(runnable command)
//《執行緒池提交任務和執行任務原始碼解析》分析到這裡
// isrunning(c):判斷當前執行緒池是不是還在執行,如果是就會像workqueue 新增這個任務
// pivate final blockingqueueworkqueue;
// workqueue 就是乙個阻塞佇列if(
isrunning
(c)&& workqueue.
offer
(command)
)elseif(
!addworker
(command,
false))
reject
(command)
;//拒絕策略
}
rejectedexecution
public
void
rejectedexecution
(runnable r, threadpoolexecutor e)
直接丟擲異常
abortpolicy
public
void
rejectedexecution
(runnable r, threadpoolexecutor e)
}
runnable r : 任務
threadpoolexecutor e : 執行緒池
也就是說這個任務交給提交任務的執行緒處理
discardoldestpolicy
public
void
rejectedexecution
(runnable r, threadpoolexecutor e)
}
從阻塞佇列裡面poll出乙個任務,將新的任務新增
discardpolicy
public
void
rejectedexecution
(runnable r, threadpoolexecutor e)
不做任何處理,也就是說,**執行到這裡結束了 向執行緒池提交任務
1 threadpoolexetor submit callabletask 有返回值 public class sumit1 executorservice executor executors.newsinglethreadexecutor future future executor.subm...
執行緒池 2 獲取任務結果,提交任務
第二部分是關於執行緒池主要兩個操作 1.提交乙個任務 2.獲取已提交任務的結果 提交任務函式 傳入乙個函式指標,乙個引數void 以及是否需要查詢返回值,如果不需要返回值效率會高些,如果選擇要查詢結果,但是任務完成後沒有獲取結果的話,會一直占用空間 如果是不需要返回值返回1,否則返回key,失敗返回...
執行緒池 任務延時執行
我在做乙個匯入功能,匯入的邏輯都是呼叫的頁面介面。介面執行邏輯 將資料儲存到資料庫,然後再呼叫job任務加工歷史資料。使用者在頁面上操作是ok的,畢竟每操作一下,介面最多呼叫一次。但是匯入就不一樣了,相當於使用者一直在對著頁面點點點 這會導致後面歷史任務的加工出現問題。在匯入的時候,我需要先讓基本資...