第9章 Java中的線程池
線程池優勢:
①減少資源消耗
②提高響應速度
③統一管理
9.1 線程池的實現原理
當任務來后
①判斷核心線程池是否已滿,若未滿,創建一個核心線程來執行任務
②若無空閑核心線程且核心線程已滿,則將任務放入任務隊列
③若隊列已滿或無隊列,且線程數未到最大線程數,則創建線程執行(到時候銷毀大于核心線程數小于最大線程數的線程)
④若已達最大線程數,則走飽和任務處理流程
9.2 線程池的使用
創建線程池:new ThreadPoolExecutor
提交任務:execute(Runnable)無返回值,submit(FutureTask)有返回值,通過get方法阻塞獲取
關閉線程池:shutdown/shutdownNow
9.2.4 合理配置線程池
①cpu密集型,cpu核數+1
②io密集型,cpu核數x2
③依賴數據庫連接池,需等待返回嗎,可多創線程,但不能多于連接數
④使用有界隊列,防止內存溢出
9.2.5 線程池的監控
P207