前言
原以為線程池還挺簡單的(平時常用,也分析過原理),這次是想自己動手寫一個線程池來更加深入的了解它;但在動手寫的過程中落地到細節時發現並沒想的那麼容易。結合源碼對比後確實不得不佩服 Doug Lea
。
我覺得大部分人直接去看 java.util.concurrent.ThreadPoolExecutor
的源碼時都是看一個大概,因為其中涉及到了許多細節處理,還有部分 AQS
的內容,所以想要理清楚具體細節並不是那麼容易。
與其挨個分析源碼不如自己實現一個簡版,當然簡版並不意味著功能缺失,需要保證核心邏輯一致。
所以也是本篇文章的目的:
自己動手寫一個五臟俱全的線程池,同時會了解到線程池的工作原理,以及如何在工作中合理的利用線程池。
再開始之前建議對線程池不是很熟悉的朋友看看這幾篇:
這裡我截取了部分內容,也許可以埋個伏筆(坑)。