新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
设置了 cron,如果任务用时超过了给定的时间间隔将会如何?多个 job 在同一个线程中执行;有同时执行的多个 job 时,这些 job 的执行顺序不定
成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:做网站、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的昭通网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
设置了 fixedRate,如果任务用时超过了设置的 fixedRate 值将会如何?在一个时间间隔内,如果一轮任务还没跑完,则下一轮任务的执行时间将会推后一个时间间隔,以此类推。
定义的定时任务,是怎么执行的?若任务用时超过 fixedRate 值,则下一轮任务会紧接在本轮任务后进行。
怎么一个定时任务多线程执行主要还是 JDK 的 ScheduledThreadPoolExecutor 类,大核心线程数是
Integer.MAX_VALUE,每个 @Scheduled 定义的方法都会共用一个线程池,但只有 1
个核心线程数,一个定时任务执行时间太久,会阻塞别的定时任务执行,主要类:org.springframework.scheduling.config.ScheduledTaskRegistrar
ScheduledExecutorService parseExcelThreadPool = ThreadPoolUtils.getParseExcelThreadPool();
for (int i = 0; i< ThreadPoolUtils.PARSE_EXCEL_THREAD_NUMBER; i++) {parseExcelThreadPool.scheduleWithFixedDelay(
() ->dataAnalyzeTaskService.doTask()
, 0
, 1
, TimeUnit.SECONDS
);
}
上面说到:一个定时任务执行时间太久,会阻塞别的定时任务执行,那么怎么实现能并行执行定义的定时任务呢?@Configuration
public class ScheduleConfig implements SchedulingConfigurer {@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(
2
, new CustomizableThreadFactory("scheduledThread--")
);
taskRegistrar.setScheduler(scheduledThreadPoolExecutor);
}
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧