爬蟲框架開發中對線程池的實戰對比,揭示 ExecutorService 與 ThreadGroup 的能力邊界。
ExecutorService pool = Executors.newFixedThreadPool(2); pool.execute(new MyThread()); pool.execute(new MyThread()); // ... pool.shutdown();
定位:任務執行容器,核心能力「提交-執行-關閉」。
ThreadGroup tg = new ThreadGroup("My Group");
MyThread thrd = new MyThread(tg, "MyThread #1");
// 啟動後可監控:
tg.activeCount(); // 活躍線程數
tg.enumerate(threadsArray); // 遍歷所有線程
thrd.myStop(); // 自定義停止協議
tg.interrupt(); // 批量中斷
| 能力 | ExecutorService | ThreadGroup |
|---|---|---|
| 任務提交/執行 | ✓ 核心職責 | ✗ 需自行管理 |
| 線程生命周期管理 | ✓ 內建 | ✗ 手動實現 |
| 活躍線程遍歷/計數 | ✗ 無直接 API | ✓ activeCount()/enumerate() |
| 批量中斷/停止 | ✓ shutdownNow() | ✓ interrupt() |
| 線程分組隔離 | ✗ | ✓ 天然分組 |
| 未捕獲異常處理 | ✗ 需自定義 | ✓ uncaughtException() 重寫 |
ThreadMXBean、CompletableFuture、StructuredTaskScope (JDK 21+)原文來源:博客園