自定义线程池工具类

@Slf4j
public class MyThreadPoolExecutor {

  public static Map<String,ThreadPoolExecutor> SYS_POOL_MAP = new ConcurrentHashMap<>();

  public static synchronized ThreadPoolExecutor getNamedPoolExecutor(String name,int corePoolSize, int maximumPoolSize){
      ThreadPoolExecutor executor = SYS_POOL_MAP.get(name);
      if(executor== null){
          executor = getPoolExecutor(corePoolSize,maximumPoolSize);
          SYS_POOL_MAP.put(name,executor);
      }
      return executor;
  }

  private static ThreadPoolExecutor getPoolExecutor(int corePoolSize, int maximumPoolSize ){
      long keepAliveTime = 600;
      TimeUnit unit = TimeUnit.SECONDS;
      BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(corePoolSize);
      ThreadFactory threadFactory = new NameTreadFactory();
      RejectedExecutionHandler handler = new MyIgnorePolicy();
      ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit,
              workQueue, threadFactory, handler);
      executor.prestartAllCoreThreads(); // 预启动所有核心线程
      log.info("pool executor has inited ");
      return  executor;
  }

  static class NameTreadFactory implements ThreadFactory {
        private final AtomicInteger mThreadNum = new AtomicInteger(1);

        @Override
        public Thread newThread(Runnable r) {
            Thread t = new Thread(r, "my-thread-" + mThreadNum.getAndIncrement());
            log.info(t.getName() + " has been created");
            return t;
        }
    }

    public static class MyIgnorePolicy implements RejectedExecutionHandler {

        public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
            doLog(r, e);
        }

        private void doLog(Runnable r, ThreadPoolExecutor e) {
            // 可做日志记录等
            log.error( r.toString() + " rejected");
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值