首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 5 線程新特性:線程池全面解析與實戰

     編輯:Java 相關知識

線程池核心優勢

線程池採用對象池思想:預創建線程存放池中,任務提交時復用線程,避免頻繁創建/銷毀開銷。Java 5 在 java.util.concurrent 提供完整實現,核心接口 ExecutorService,工廠類 Executors。

常見線程池類型與創建方式

1. 固定大小線程池

ExecutorService pool = Executors.newFixedThreadPool(2); // 核心=最大=2
// 提交5個任務,只會有2個線程並發執行,其餘排隊
pool.execute(t1); pool.execute(t2); pool.execute(t3); pool.execute(t4); pool.execute(t5);
pool.shutdown();

輸出:pool-1-thread-1 執行4次,pool-1-thread-2 執行1次,體現線程復用。

2. 單線程線程池

ExecutorService pool = Executors.newSingleThreadExecutor(); // 單線程串行

所有任務由同一線程按順序執行,保證任務間無並發衝突。

3. 可變大小線程池(緩存池)

ExecutorService pool = Executors.newCachedThreadPool(); // 按需創建,空閒60秒回收

適合大量短生命周期任務,無上限風險需謹慎使用。

4. 定時/周期執行線程池

ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);
pool.execute(task); // 立即執行
pool.schedule(task, 10, TimeUnit.MILLISECONDS); // 延遲10ms執行
pool.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS); // 週期執行

5. 單線程定時池

ScheduledExecutorService pool = Executors.newSingleThreadScheduledExecutor();

6. 自定義線程池(ThreadPoolExecutor)

BlockingQueue queue = new ArrayBlockingQueue<>(20);
ThreadPoolExecutor pool = new ThreadPoolExecutor(
    2,      // corePoolSize
    3,      // maximumPoolSize
    2, TimeUnit.MILLISECONDS, // keepAliveTime
    queue   // workQueue
);

參數詳解:

  • corePoolSize:核心線程數(常駐)
  • maximumPoolSize:最大線程數
  • keepAliveTime:非核心線程空閒存活時間
  • workQueue:任務隊列(有界/無界)

自定義池可獲取運行指標:getPoolSize()、getActiveCount()、getQueue() 等。

關鍵配置建議

  • CPU 密集型:核心數 = CPU 核心數 + 1
  • I/O 密集型:核心數 = CPU 核心數 * (1 + 平均等待/平均工作)
  • 隊列選擇:有界隊列防 OOM,拒絕策略 CallerRunsPolicy 等
  • 線程命名:實現 ThreadFactory 便於排查
  • 關閉流程:shutdown() + awaitTermination() 確保任務完成

出處:https://lavasoft.blog.51cto.com/62575/222078

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved