Java線程池的原理

一、線程池的特點

線程池做的工作主要是控制運行的線程的數量,處理過程中將任務放入隊列,然後在線程創建後啓動這些任務,如果線程數量超過了最大數量超出數量的線程排隊等候,等其它線程執行完畢,再從隊列中取出任務來執行。他的主要特點爲:線程複用;控制最大併發數;管理線程。

二、線程池的原理

每一個 Thread 的類都有一個 start 方法。 當調用 start 啓動線程時 Java 虛擬機會調用該類的 run 方法。 那麼該類的 run() 方法中就是調用了 Runnable 對象的 run() 方法。 我們可以繼承重寫Thread 類,在其 start 方法中添加不斷循環調用傳遞過來的 Runnable 對象。 這就是線程池的實現原理。循環方法中不斷獲取 Runnable 是用 Queue 實現的,在獲取下一個 Runnable 之前可以是阻塞的。

三、線程池的組成

  1. 線程池管理器:用於創建並管理線程池;

  2. 工作線程:線程池中的線程;

  3. 任務接口:每個任務必須實現的接口,用於工作線程調度其運行;

  4. 任務隊列:用於存放待處理的任務,提供一種緩衝機制。

四、Java中的線程池

Java 中的線程池是通過 Executor 框架實現的,該框架中用到了 Executor,Executors,ExecutorService,ThreadPoolExecutor ,Callable 和 Future、FutureTask 這幾個類。

五、線程池的常用配置

  1. corePoolSize:指定了線程池中的線程數量。

  2. maximumPoolSize:指定了線程池中的最大線程數量。

  3. keepAliveTime:當前線程池數量超過 corePoolSize 時,多餘的空閒線程的存活時間,即多次時間內會被銷燬。

  4. unit:keepAliveTime 的單位。

  5. workQueue:任務隊列,被提交但尚未被執行的任務。

  6. threadFactory:線程工廠,用於創建線程,一般用默認的即可。

  7. handler:拒絕策略,當任務太多來不及處理,如何拒絕任務。

(芬香邀請碼:BXDC88)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章