溫馨提示×

java newfixedthreadpool如何配置

小樊
144
2024-11-26 14:55:25
欄目: 編程語言

newFixedThreadPool 是 Java 中 ExecutorService 接口的一個實現,它創建了一個固定大小的線程池。要配置 newFixedThreadPool,你需要設置以下參數:

  1. 核心線程數(corePoolSize):這是線程池中始終保持活躍的線程數量。即使這些線程處于空閑狀態,也不會被終止。如果任務數量超過了核心線程數,那么將會創建新的工作線程來處理任務。

  2. 最大線程數(maximumPoolSize):這是線程池中允許的最大線程數量。當任務數量超過了核心線程數,并且所有核心線程都在忙碌時,線程池會創建新的工作線程,直到達到最大線程數。

  3. 任務隊列(workQueue):這是一個用于存儲等待執行的任務的隊列。當線程池中的線程完成任務后,新提交的任務會被添加到任務隊列中。如果任務隊列已滿,且線程池中的線程都在忙碌,那么線程池會根據拒絕策略(RejectedExecutionHandler)處理無法執行的任務。

  4. 線程工廠(ThreadFactory):這是一個用于創建新線程的工廠。你可以使用自定義的線程工廠來設置線程的名稱、優先級等屬性。

  5. 拒絕策略(RejectedExecutionHandler):當任務隊列已滿,且線程池中的線程都在忙碌時,線程池會根據拒絕策略處理無法執行的任務。Java 提供了四種內置的拒絕策略:

    • AbortPolicy(默認策略):直接拋出 RejectedExecutionException 異常。
    • CallerRunsPolicy:在調用者線程中執行被拒絕的任務。
    • DiscardPolicy:直接丟棄被拒絕的任務,不拋出異常。
    • DiscardOldestPolicy:丟棄隊列中最舊的任務,然后嘗試重新提交被拒絕的任務。

下面是一個使用 newFixedThreadPool 的示例:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class FixedThreadPoolExample {
    public static void main(String[] args) {
        int corePoolSize = 5;
        int maximumPoolSize = 10;
        long keepAliveTime = 60L;
        TimeUnit unit = TimeUnit.SECONDS;
        BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(20);
        ThreadFactory threadFactory = Executors.defaultThreadFactory();
        RejectedExecutionHandler rejectedExecutionHandler = new ThreadPoolExecutor.CallerRunsPolicy();

        ExecutorService executorService = Executors.newFixedThreadPool(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, rejectedExecutionHandler);

        // 提交任務到線程池
        for (int i = 0; i < 30; i++) {
            executorService.submit(() -> {
                System.out.println("Task executed by thread: " + Thread.currentThread().getName());
            });
        }

        // 關閉線程池
        executorService.shutdown();
    }
}

在這個示例中,我們創建了一個固定大小為 5 的線程池,最大線程數為 10,空閑線程在 60 秒后會被終止。任務隊列的容量為 20,使用默認的線程工廠和調用者運行策略作為拒絕策略。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女