3.線程池的使用

1.線程池的出現

java對象佔用堆內存,操作系統線程佔用系統內存,根據jvm規範,一個線程默認最大棧大小爲1M,線程過大,會消耗很多的內存。

線程池的出現,就是爲了方便控制線程數量。

2.線程池原理

理解 線程池管理器、工作線程、任務接口、任務隊列。

線程池管理器:用於創建並管理線程池,包括線程池的創建、銷燬、添加新任務。

工作線程:線程池中的線程,在沒有任務時處於等待狀態。

任務接口:每個任務必須實現的接口(Runnable接口),以供工作線程調度任務的執行。

任務隊列: 用於存放沒有處理的任務。提供一種緩衝機制。

在這裏插入圖片描述

3.線程池線相關api

接口:Executor、ExecutorService、ScheduledExecutorService

實現類:ThreadPoolExecutor、ScheduledThreadPoolExcutor

類型 名稱 描述
接口 Executor 最頂層接口,定義執行任務方法execute
接口 ExecutorService 繼承Executor,擴展Callable、Future、shutdown關閉方法
接口 ScheduledExecutorService 繼承ExcutorService,擴展定時相關方法
實現類 ThreadPoolExecutor 基礎、標準的線程池實現,其他線程池都是基於此進行擴展的
實現類 ScheduledThreadPoolExcutor 繼承ThreadPoolExecutor,實現了定時任務相關的方法。

Executors工具類,創建線程池的工具類。這些線程池都是ThreadPoolExecutor的擴展,見名知意,不詳述。

在這裏插入圖片描述

4.合理設置線程數

如何設置合理的線程池中的線程數呢?

計算型任務:cpu數量的1-2倍。

IO型任務:相對比計算型任務,需要多一些線程,要根據具體的IO阻塞時常進行考慮,如tomcat默認最大線程:200。

也可以根據需要設置最小數量和最大數量,如db連接池。

上一篇:2.線程封閉之Threadlocal
下一篇:4.源碼中的HashMap與JUC之ConcurrentHashMap

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