- import org.springframework.context.annotation.Configuration;
- import org.springframework.scheduling.annotation.SchedulingConfigurer;
- import org.springframework.scheduling.config.ScheduledTaskRegistrar;
- import java.util.concurrent.Executors;
- /**
- * Description: 多线程履行准时义务
- * Designer: jack
- * Date: 2017/8/10
- * Version: 1.0.0
- */
- @Configuration
- //所有的准时义务都放在一个线程池中,准时义务启动时应用不合都线程。
- public class ScheduleConfig implements SchedulingConfigurer {
- @Override
- public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
- //设定一个长度10的准时义务线程池
- taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
- }
- }
5. 履行结不雅(并发)
经由过程控制台输出的结不雅看出每个准时义务都是在经由过程不合的线程来处理了。
三、cron详解
1. cron表达式定义
Cron表达式是一个字符串,是由空格隔开的6或7个域构成,每一个域对应一个含义(秒 分 时 每月第几天 月 礼拜 年)个中年是可选字段。
然则,此处敲一下黑板,spring的schedule值支撑6个域的表达式,也就是不克不及设定年,如不雅跨越六个则会报错。源码如下:
- /**
- * Parse the given pattern expression.
- */
- private void parse(String expression) throws IllegalArgumentException {
- String[] fields = StringUtils.tokenizeToStringArray(expression, " ");
- if (!areValidCronFields(fields)) {
- throw new IllegalArgumentException(String.format(
- "Cron expression must consist of 6 fields (found %d in \"%s\")", fields.length, expression));
- }
- setNumberHits(this.seconds, fields[0], 0, 60);
- setNumberHits(this.minutes, fields[1], 0, 60);
- setNumberHits(this.hours, fields[2], 0, 24);
- setDaysOfMonth(this.daysOfMonth, fields[3]);
- setMonths(this.months, fields[4]);
- setDays(this.daysOfWeek, WordStrOrdinals(fields[5], "SUN,MON,TUE,WED,THU,FRI,SAT"), 8);
- if (this.daysOfWeek.get(7)) {
- // Sunday can be represented as 0 or
推荐阅读
【51CTO晃荡】8.26 带你深度懂得清华大年夜学、搜狗基于算法的IT运维实践与摸索 本文起首介绍非抢占式内核(Non-Preemptive Kernel)和可抢占式内核(Preemptive Kernel)的差别。接着分析L>>>详细阅读
地址:http://www.17bianji.com/lsqh/36757.html
1/2 1