執行緒池提交任務和執行任務原始碼解析(2)

2021-10-13 12:21:36 字數 1347 閱讀 5847

因為篇幅太長所以分兩篇部落格進行說明,本文算是對《執行緒池提交任務和執行任務原始碼解析》的補充

第一篇部落格《執行緒池提交任務和執行任務原始碼解析》—》

繼續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的,畢竟每操作一下,介面最多呼叫一次。但是匯入就不一樣了,相當於使用者一直在對著頁面點點點 這會導致後面歷史任務的加工出現問題。在匯入的時候,我需要先讓基本資...