- Timer
- Timer(String name,Boolean isDaemon)设置线程名称,并色泽true时表示以守护线程执行
- Schedule(TimerTask,delay)只调度一次延迟delay毫秒后执行
- Schedule(timertask,date)调度一次在具体时间执行
- Schedule(timertask,delay,perio循环调度,在delay之后开始,每个period执行一次
- Schedule(Timertask,date,period)循环,在到了date时间之后开始,每个period执行
- Purge清理所有已取消状态的timertask
- Cancel取消所有调度
- Timer timer=new Timer(“myTimer”)
- TimerTask task=new TimerTask(){
- Run(){
- }
- }
- Timer.schedule(task,3000)//可以设其他值
- scheduledExecutorservice
- ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(new MyTask(), 0, 3, TimeUnit.SECONDS);每个三秒执行一次
- spring task
- 在方法上使用@Scheduled设置执行时间
- FixedRate 每隔多少时间启动任务,不管任务是否完成
- fixedDelay 每次执行任务完成之后间隔多久再次执行
- Cron 根据表达式执行
- @scheduled(initialDelay=1000)指定第一次执行的延时时间
- @EnableScheduling主类启动定时器
- @EnableAsync开启异步事件支持,使单线程的定时任务变成并行
- @Configuration
- @EnableAsync //开启异步事件的支持
- public class AsyncConfig {
- // 此处成员变量应该使用@Value从配置中读取
- private int corePoolSize = 10;
- private int maxPoolSize = 200;
- private int queueCapacity = 10;
- @Bean
- public Executor taskExecutor() {
- ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
- executor.setCorePoolSize(corePoolSize);
- executor.setMaxPoolSize(maxPoolSize);
- executor.setQueueCapacity(queueCapacity);
- executor.initialize();
- return executor;
- }
- }
- 在方法上使用@Scheduled设置执行时间
- Quartz
- 与上一种最大的区别在于可以用calendar来控制哪些时间不执行定时任务
- Job 实现job重写execute
- jobDetail scheduler.getJobDetail获取jobDetail
- Trigger scheduler.getTrigger获取cronTrigger
- Scheduler 直接注入scheduler组件,调用start开始执行定时器,getTriggerState获取job的信息,scheduler.rescheduleJob修改某个任务的执行时间,scheduler.paseuseall暂停所有任务,scheduler.pauseJob暂停某个任务,resumeAll恢复某个任务,scheduler.deleteJob删除某个任务,schedulerJob创建任务
- 三个常用builder分别创建jobdetail、cronScheduleBuilder、cronTrigger
- CronScheduleBuilder
- JobBuilder
- TriggerBuilder
- Calendar
- cron字符串
- 0~59秒,-*/ 0~59分,-*/ 0~23时,-*/ 1~31日期,-*?/LWC 1-12月,-*/ 1-7星期,-*?#/LC 1970-2099年,-*/
- 逗号表示多个,星号表示任意值 ,问号只能在日期和星期使用,匹配任意值
下划线表示从起始时间到间隔时间执行一次,L表示当月最后一天L前加数字表示倒数第几天,w表示工作日周一到周五,LW某月最后一个工作日最后一个星期五,
#每个月第几个星期几4#2表示某月的第二个星期三