線程池工具類:PrototypeThreadPoolUtil

package com.bonade.utils;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 每次獲取生成新的線程池
 * @author xiejianwei
 * @description 適用於有狀態的線程處理
 */
public class PrototypeThreadPoolUtil {

    //根據cpu的數量動態的配置核心線程數和最大線程數
    private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
    //核心線程數 = CPU核心數 + 1
    private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
    //線程池最大線程數 = CPU核心數 * 2 + 1
    private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 10;
    //非核心線程閒置時間 = 超時1s
    private static final int KEEP_ALIVE = 1;
    // 隊列容量
    private static final int CAPACITY = 500;


    public static ThreadPoolExecutor getInstance() {
        return new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,
                TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(CAPACITY),
                Executors.defaultThreadFactory(), new ThreadPoolExecutor.CallerRunsPolicy());
    }


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章