ScheduleConfig.java 1.3 KB

123456789101112131415161718192021222324252627282930
  1. package com.genersoft.iot.vmp.conf;
  2. import org.apache.commons.lang3.concurrent.BasicThreadFactory;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.scheduling.annotation.SchedulingConfigurer;
  5. import org.springframework.scheduling.config.ScheduledTaskRegistrar;
  6. import java.util.concurrent.ScheduledThreadPoolExecutor;
  7. import java.util.concurrent.ThreadPoolExecutor;
  8. /**
  9. * "@Scheduled"是Spring框架提供的一种定时任务执行机制,默认情况下它是单线程的,在同时执行多个定时任务时可能会出现阻塞和性能问题。
  10. * 为了解决这种单线程瓶颈问题,可以将定时任务的执行机制改为支持多线程
  11. */
  12. @Configuration
  13. public class ScheduleConfig implements SchedulingConfigurer {
  14. public static final int cpuNum = Runtime.getRuntime().availableProcessors();
  15. private static final int corePoolSize = cpuNum;
  16. private static final String threadNamePrefix = "scheduled-task-pool-%d";
  17. @Override
  18. public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
  19. taskRegistrar.setScheduler(new ScheduledThreadPoolExecutor(corePoolSize,
  20. new BasicThreadFactory.Builder().namingPattern(threadNamePrefix).daemon(true).build(),
  21. new ThreadPoolExecutor.CallerRunsPolicy()));
  22. }
  23. }