線程池做的工作主要是控制與逆行的線程數量,處理過程中将任務放入隊列,然後線上程建立後啟動這些任務,如果線程數量超過了最大數量,超出數量的線程排隊等待,等其他線程執行完畢,再從隊列中取出任務來執行。
他的主要特點為:線程複用;控制最大并發數;管理線程。
每一個 Thread 的類都有一個 start 方法。
當調用 start 啟動線程時 Java 虛拟機會調用該類的 run 方法。那麼該類的 run() 方法中就是調用了 Runnable 對象的 run() 方法。
我們可以繼承重寫 Thread 類,在其 start 方法中不斷循環調用傳遞過來的 Runnable 對象,這就是線程池的實作原理。
循環方法中不斷擷取 Runnable 是用 Queue 實作的,在擷取下一個 Runnable 之前可以是阻塞的。
一般的線程池主要分為以下 4 個組成部分:
1.線程池管理器:用于建立并管理線程池
2.工作線程:線程池中的線程
3.任務接口:每個任務必須實作的接口,用于工作線程排程其運作
4.任務隊列:用于存放待處理的任務,提供一種緩沖機制
Java 中的線程池是通過 Executor 架構實作的,該架構中用到了 Executor,Executors,ExecutorService,ThreadPoolExe