java -- 单例线程池创建类

package com.zte.ws.service.common;

import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;


public class ManagerMonitorThreadPoolService {
    private static final int CPU_CORES = Runtime.getRuntime().availableProcessors();
    private static final int DEFAULT_CORE_SIZE = Math.max(2, Math.min(CPU_CORES, 16));
    private static final int MAX_CORE_SIZE = Math.min(CPU_CORES*3, 40);
    private static final int QUEUE_SIZE = 200;


    private ManagerMonitorThreadPoolService() {

    }

    /**
     * 获取单例线程池对象
     *
     * @return
     */
    private static volatile ThreadPoolExecutor executor;

    public static ThreadPoolExecutor getInstance() {
        if (executor == null) {
            initInstance();
        }
        return executor;
    }

    private static synchronized void initInstance()
    {
        if (executor == null){
            executor = new ThreadPoolExecutor(
                    DEFAULT_CORE_SIZE,   //核心线程数
                    MAX_CORE_SIZE,      //最大线程数
                    1L,          //闲置线程存活时间
                    TimeUnit.MINUTES,     //时间单位
                    new LinkedBlockingDeque<Runnable>(QUEUE_SIZE)  //线程队列
            );
        }
    }
}

@Override
    public Map<String, BaseResult> checkPingForWeb(List<GdbManagerCheckPingDto> dtos) {
        log.debug("checkPingForWeb start");
        // 这里只处理rdb的条件校验
        validateRdbBatchWithException(dtos);
        Map<String, BaseResult> resultMap = new ConcurrentHashMap<>();
        StringBuffer errorResults = new StringBuffer();
        if (CollectionUtils.isEmpty(dtos)) {
            return resultMap;
        }

        // 使用单例线程池替代原来的FixedThreadPool
        ThreadPoolExecutor executor = ManagerCheckPingThreadPoolService.getInstance();
        try {
            executeCheckPingTasks(dtos, resultMap, errorResults, executor);
        } catch (Exception e) {
            log.error("checkPingForWeb Exception occurred", e);
            String errorMessage = e.getCause() != null ? e.getCause().getMessage() : e.getMessage();
            appendSystemError(errorResults, errorMessage);
        }
        finally {
            log.debug("checkPingForWeb,ThreadPool final state - Active threads: {}, Pool size: {}, Core pool size: {}, Max pool size: {}",
                    executor.getActiveCount(), executor.getPoolSize(), executor.getCorePoolSize(), executor.getMaximumPoolSize());
//            if (executor != null && !executor.isShutdown()) {
//                executor.shutdownNow();
//            }
        }
        if (StringUtils.isNotBlank(errorResults.toString())) {
            throw new DBaaSBusinessException(errorResults.toString());
        }
        log.debug("checkPingForWeb end");
        return resultMap;
    }
posted @ 2026-02-11 12:37  静水深耕,云停风驻  阅读(0)  评论(0)    收藏  举报