ThreadPoolExecutor原始碼閱讀

2021-08-01 20:45:53 字數 1270 閱讀 5821

執行緒池解決兩個問題

一是復用執行緒,減少建立銷毀執行緒帶來系統開銷;

二是限定系統資源使用邊界,避免大量執行緒消耗盡系統記憶體

適用於互不依賴,執行時間短,不需要對執行緒控制操作的執行緒

新增任務時,

1.若執行緒數量小於corepoolsize,則新增執行緒執行任務

2.若執行緒數量大於等於corepoolsize且queue佇列非滿,任務新增到queue

3.若執行緒數量大於等於corepoolsize且queue佇列滿,則新增執行緒執行任務直到執行緒數量到達maximumpoolsize

4.若執行緒池滿,任務無法被執行,執行使用者定義或者預設的rejectedexecutionhandler

執行任務

執行執行緒持續從queue佇列中獲取任務並執行

execute

public void execute(runnable command) 

if (isrunning(c) && workqueue.offer(command))

else if (!addworker(command, false))

reject(command);//若佇列滿或者執行緒池關閉,執行rejecthandler

}

addwork

private boolean addworker(runnable firsttask, boolean core) 

}boolean workerstarted = false;

boolean workeradded = false;

worker w = null;

try

} finally

if (workeradded)

}} finally

return workerstarted;

}

runworker

final void runworker(worker w)  catch (runtimeexception x)  catch (error x)  catch (throwable x)  finally 

} finally

}completedabruptly = false;

} finally

}

SynchronousQueue原始碼閱讀心得

synchronousqueue 簡寫為sq 同步佇列中,讀執行緒與寫執行緒只有相互匹配時才能完成一次完整的讀寫操作。而讀與寫的匹配依賴於transferqueue或transferstack中的transfer sq中重要的資料結構有transferqueue和transferstack,還有qn...

Vector和Hashtable原始碼閱讀與理解

vector是執行緒安全的arraylist public synchronized void insertelementat e obj,int index ensurecapacityhelper elementcount 1 system.arraycopy elementdata,index...

seata xid是什麼 seata原始碼閱讀筆記

seata原始碼閱讀筆記 本文基於v0.8.0版本,本文沒貼 seata中的三個重要部分 tc 事務協調器,維護全域性事務和分支事務的狀態,驅動全域性提交或回滾,就是seata的服務端。tm 事務管理器,開始全域性事務,提交或回滾全域性事務。rm 資源管理器,管理正在處理的分支事務的資源,向tc註冊...