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

J2SE 5.0 並發套件入門(一):Executor 框架與執行緒池基礎

     編輯:J2SE

為什麼需要新的並發套件?

傳統 new Thread(runnable).start() 方式存在諸多問題:執行緒建立銷毀開銷大、無統一管理、難以控制並發數量、任務提交與執行耦合。J2SE 5.0 java.util.concurrent 套件從根本上解決了這些痛點。

Executor 介面:最簡抽象

public interface Executor {
    void execute(Runnable command);
}

將「任務提交」與「執行策略」解耦。實作範例:

  • 同步執行:呼叫端執行緒直接 run()
  • 非同步執行:新建執行緒或使用執行緒池
  • 延遲/定時執行:配合 ScheduledExecutorService

ExecutorService:標準執行緒池操作

透過 Executors 工廠快速建立:

// 固定大小執行緒池
ExecutorService fixed = Executors.newFixedThreadPool(3);

// 單執行緒序列化執行
ExecutorService single = Executors.newSingleThreadExecutor();

// 可縮放執行緒池(適合大量短任務)
ExecutorService cached = Executors.newCachedThreadPool();

關鍵方法

  • submit(Runnable/Callable):提交任務,返回 Future
  • shutdown():優雅關閉,不再接受新任務
  • shutdownNow():嘗試中斷執行中任務
  • awaitTermination(timeout, unit):等待終止
  • invokeAll/InvokeAny:批次提交任務集合

實戰範例:優雅關閉執行緒池

ExecutorService pool = Executors.newFixedThreadPool(3);
// 提交任務...
pool.shutdown(); // 停止接受新任務
try {
    if (!pool.awaitTermination(10, TimeUnit.SECONDS)) {
        pool.shutdownNow(); // 強制關閉
        if (!pool.awaitTermination(10, TimeUnit.SECONDS))
            System.err.println("Pool did not terminate");
    }
} catch (InterruptedException ex) {
    pool.shutdownNow();
    Thread.currentThread().interrupt();
}

ScheduledExecutorService:定時任務

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);
// 5 秒後執行一次
scheduler.schedule(() -> System.out.println("一次性"), 5, TimeUnit.SECONDS);
// 每 3 秒固定頻率執行
scheduler.scheduleAtFixedRate(() -> System.out.println("固定頻率"), 0, 3, TimeUnit.SECONDS);
// 上次執行結束後 2 秒再執行
scheduler.scheduleWithFixedDelay(() -> System.out.println("固定延遲"), 0, 2, TimeUnit.SECONDS);

核心優勢總結

  1. 資源復用:執行緒池避免頻繁建立/銷毀開銷
  2. 可管控性:統一配置核心數、最大數、隊列、拒絕策略
  3. 功能豐富:支援定時、週期、批次、結果獲取、異常處理
  4. 擴充性:可自訂 ThreadFactory、RejectedExecutionHandler、勾子方法

下一步學習

深入掌握 ThreadPoolExecutor 七大參數配置藝術、Future 非同步編程模式、CompletableFuture(Java 8)組合式非同步、並發集合與同步器實戰應用。

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