content: package com.zzyl.config;
  
  import org.springframework.context.annotation.Bean;
  import org.springframework.context.annotation.Configuration;
  
  import java.util.concurrent.ExecutorService;
  import java.util.concurrent.LinkedBlockingQueue;
  import java.util.concurrent.ThreadPoolExecutor;
  import java.util.concurrent.TimeUnit;
  import java.util.concurrent.atomic.AtomicInteger;
  
  @Configuration
  public class ThreadPoolConfig {
  
      /**
       * 核心线程池大小
       */
      private static final int CORE_POOL_SIZE = Runtime.getRuntime().availableProcessors();
  
      /**
       * 最大可创建的线程数
       */
      private static final int MAX_POOL_SIZE = Runtime.getRuntime().availableProcessors() * 2;
  
      /**
       * 队列最大长度
       */
      private static final int QUEUE_CAPACITY = 50000;
  
      /**
       * 线程池维护线程所允许的空闲时间
       */
      private static final int KEEP_ALIVE_SECONDS = 60;
  
      @Bean
      public ExecutorService executorService(){
          AtomicInteger c = new AtomicInteger(1);
          LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>(QUEUE_CAPACITY);
          return new ThreadPoolExecutor(
                  CORE_POOL_SIZE,
                  MAX_POOL_SIZE,
                  KEEP_ALIVE_SECONDS,
                  TimeUnit.MILLISECONDS,
                  queue,
                  r -> new Thread(r, "zzyl-pool-" + c.getAndIncrement()),
                  new ThreadPoolExecutor.DiscardPolicy()
          );
      }
  }
  