課程標題:線程池與Callable/Future應用(15分鐘)
目標:掌握線程池的創建與管理,理解Callable任務與Future異步結果處理機制
0-1分鐘:課程引入與線程池意義
以“銀行窗口服務”類比線程池:復用固定資源(柜員)處理多任務(客戶)。說明線程池的核心價值——避免頻繁創建/銷毀線程的開銷,控制并發規模。
1-2分鐘:線程池的創建方式
演示通過Executors
工具類快速創建線程池:
ExecutorService fixedPool = Executors.newFixedThreadPool(4); // 固定線程數
ExecutorService cachedPool = Executors.newCachedThreadPool(); // 彈性擴容
ScheduledExecutorService scheduledPool = Executors.newScheduledThreadPool(2); // 定時任務
2-4分鐘:ThreadPoolExecutor核心參數
手動配置線程池(更靈活):
ThreadPoolExecutor customPool = new ThreadPoolExecutor( 2, // 核心線程數 10, // 最大線程數 60, TimeUnit.SECONDS, // 空閑線程存活時間 new LinkedBlockingQueue<>(100) // 任務隊列
);
拒絕策略:當隊列滿且線程數達上限時,可定義AbortPolicy
(拋異常)或CallerRunsPolicy
(調用方線程執行任務)。
4-5分鐘:Callable與Runnable的對比
- Runnable:無返回值,不拋異常
Runnable task = () -> System.out.println("執行任務");
- Callable:有返回值,支持異常
Callable<Integer> task