1. 程式人生 > >Java—執行緒池ThreadPoolExecutor詳解

Java—執行緒池ThreadPoolExecutor詳解

# 引導 **要求**:執行緒資源必須通過`執行緒池`提供,不允許在應用自行顯式建立執行緒; **說明**:使用執行緒池的好處是減少在建立和銷燬執行緒上所花的時間以及系統資源的開銷,解決資源不足的問題。如果不使用執行緒池,有可能造成系統建立大量同類執行緒而導致消耗記憶體或者“過度切換”的問題。 > by 《阿里巴巴Java手冊》 # 執行緒池介紹 ### 執行緒池概述   **執行緒池**,顧名思義是一個放著執行緒的池子,這個池子的執行緒主要是用來執行任務的。當用戶提交任務時,執行緒池會建立執行緒去執行任務,若任務超過了核心執行緒數的時候,會在一個任務佇列裡進行排隊等待,這個詳細流程,我們會後面細講。   **任務**,通常是一些抽象的且離散的工作單元,我們會把應用程式的工作分解到多個任務中去執行。一般我們需要使用多執行緒執行任務的時候,這些任務最好都是相互獨立的,這樣有一定的任務邊界供程式把控。   **多執行緒**,當使用多執行緒的時候,任務處理過程就可以從主執行緒中剝離出來,任務可以並行處理,同時處理多個請求。當然了,任務處理程式碼必須是執行緒安全的。 ### 為何要使用執行緒池? 1. 降低開銷:在建立和銷燬執行緒的時候會產生很大的系統開銷,頻繁建立/銷燬意味著CPU資源的頻繁切換和佔用,執行緒是屬於稀缺資源,不可以頻繁的建立。假設建立執行緒的時長記為t1,執行緒執行任務的時長記為t2,銷燬執行緒的時長記為t3,如果我們執行