content: package com.genersoft.iot.vmp.conf;
  
  import org.apache.commons.lang3.concurrent.BasicThreadFactory;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.beans.factory.annotation.Qualifier;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.scheduling.annotation.SchedulingConfigurer;
  import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
  import org.springframework.scheduling.config.ScheduledTaskRegistrar;
  
  import java.util.concurrent.ScheduledThreadPoolExecutor;
  import java.util.concurrent.ThreadPoolExecutor;
  
  import static com.genersoft.iot.vmp.conf.ThreadPoolTaskConfig.cpuNum;
  
  /**
   * "@Scheduled"是Spring框架提供的一种定时任务执行机制，默认情况下它是单线程的，在同时执行多个定时任务时可能会出现阻塞和性能问题。
   * 为了解决这种单线程瓶颈问题，可以将定时任务的执行机制改为支持多线程
   */
  @Configuration
  public class ScheduleConfig implements SchedulingConfigurer {
  
  	/**
  	 * 核心线程数（默认线程数）
  	 */
  	private static final int corePoolSize = Math.max(cpuNum, 20);
  
  	/**
  	 * 线程池名前缀
  	 */
  	private static final String threadNamePrefix = "schedule";
  
  	@Override
  	public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
  		ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(corePoolSize,
  				new BasicThreadFactory.Builder().namingPattern(threadNamePrefix).daemon(true).build(),
  				new ThreadPoolExecutor.CallerRunsPolicy());
  		taskRegistrar.setScheduler(scheduledThreadPoolExecutor);
  	}
  }
  