溫馨提示×

java threadpoolexecutor如何設置拒絕策略

小樊
165
2024-11-16 23:22:54
欄目: 編程語言

在Java中,ThreadPoolExecutor提供了四種內置的拒絕策略,分別是:

  1. AbortPolicy(默認策略):當提交的任務無法被接受執行時,會直接拋出RejectedExecutionException異常。
  2. CallerRunsPolicy:當提交的任務無法被接受執行時,直接在調用者線程中運行該任務。
  3. DiscardPolicy:當提交的任務無法被接受執行時,直接丟棄該任務,不拋出異常也不進行任何處理。
  4. DiscardOldestPolicy:當提交的任務無法被接受執行時,丟棄隊列中最舊的任務,然后嘗試重新提交當前任務。

要設置拒絕策略,需要創建一個ThreadPoolExecutor實例,并在構造函數中傳入相應的策略。以下是一個使用CallerRunsPolicy拒絕策略的示例:

import java.util.concurrent.*;

public class ThreadPoolExample {
    public static void main(String[] args) {
        int corePoolSize = 2;
        int maximumPoolSize = 4;
        long keepAliveTime = 10L;
        TimeUnit unit = TimeUnit.SECONDS;
        BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(3);

        // 設置拒絕策略為 CallerRunsPolicy
        RejectedExecutionHandler rejectionPolicy = new CallerRunsPolicy();

        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                corePoolSize,
                maximumPoolSize,
                keepAliveTime,
                unit,
                workQueue,
                rejectionPolicy
        );

        for (int i = 0; i < 10; i++) {
            int finalI = i;
            threadPoolExecutor.submit(() -> {
                System.out.println("Task " + finalI + " is running on thread " + Thread.currentThread().getName());
            });
        }

        threadPoolExecutor.shutdown();
    }
}

在這個示例中,我們創建了一個ThreadPoolExecutor實例,并設置了CallerRunsPolicy作為拒絕策略。然后我們提交了10個任務到線程池中,當任務數量超過線程池的處理能力時,將會使用CallerRunsPolicy策略處理無法被接受的任務。

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