定时任务@Scheduled 和 异步@Async

简介: 定时任务@Scheduled 和 异步@Async

TaskScheduler 任务调度者

TaskExecutor 任务执行者


@EnableScheduling 开启定时任务功能,方法所在类需要加@Component

@Scheduled(Cron= “”) 指定执行的时间

@Scheduled(cron = "0/1 * * * * ? ")
    @Override
    public Result ScanUserState() throws InterruptedException {
        Thread.sleep(5000);
        System.out.println("执行了");
        return new Result();
    }


定时任务,只有一个线程去执行任务,任务间隔是1000毫秒,执行任务需要5000毫秒,那么任务的执行周期是1000+5000=6000毫秒。就算线程池中有多个线程,也会等那个任务执行完再选取一个线程再次执行任务。


如果同时开启了@EnableAsync和使用了@Async,如果执行时间大于Cron表达式的时间,则会选取线程池中其他的线程立刻去执行任务,如果没有剩余线程,则会等待有线程空闲出来。

@Configuration
public class ScheduleConfig implements SchedulingConfigurer,AsyncConfigurer {
    //并行任务
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar){
        TaskScheduler taskScheduler = taskScheduler();
        taskRegistrar.setTaskScheduler(taskScheduler);
    }
    //并行任务使用策略:多线程处理(配置线程数等)
    @Bean("task1")
    public ThreadPoolTaskScheduler taskScheduler(){
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setPoolSize(20);
        scheduler.setThreadNamePrefix("task-");  //设置线程名开头
        scheduler.setAwaitTerminationSeconds(60);
        scheduler.setWaitForTasksToCompleteOnShutdown(true);
        return scheduler;
    }
    //异步任务
    public Executor getAsyncExecutor(){
        Executor executor = taskScheduler();
        return executor;
    }
    //异步任务 异常处理
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler(){
        return new SimpleAsyncUncaughtExceptionHandler();
    }
}


@Async("task1")
    @Scheduled(cron = "0/1 * * * * ? ")
    @Override
    public Result ScanUserState() throws InterruptedException {
        Thread.sleep(5000);
        System.out.println("执行了");
        return new Result();
        // return LoginDao.ScanUserState();
    }
相关文章
|
6月前
|
资源调度 Java
在SchedulerX中,你可以使用`schedulerx.submitTask(taskName)`方法来提交并执行单个任务
【1月更文挑战第7天】【1月更文挑战第34篇】在SchedulerX中,你可以使用`schedulerx.submitTask(taskName)`方法来提交并执行单个任务
57 1
|
Java Spring
@Scheduled 多个定时任务同时执行
这篇文章主要介绍了springBoot @Scheduled实现多个任务同时开始执行,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
866 0
|
2月前
|
Linux 调度
内核异步处理技术 —— async_schedule
内核异步处理技术 —— async_schedule
|
3月前
|
Kubernetes API 调度
在k8S中,Scheduler作用及实现原理是什么?
在k8S中,Scheduler作用及实现原理是什么?
|
4月前
|
缓存 Java 调度
使用scheduleAtFixedRate进行定时任务调度
使用scheduleAtFixedRate进行定时任务调度
|
5月前
|
Kubernetes 监控 调度
K8S中Scheduler原理分析
【6月更文挑战第20天】K8S Scheduler是集群的关键组件,它监听API Server,为新Pod选择合适的Node。
|
6月前
|
Java 调度 Python
解决方案:APScheduler定时任务不执行,报错Run time of job ... was missed by ...
解决方案:APScheduler定时任务不执行,报错Run time of job ... was missed by ...
703 0
解决方案:APScheduler定时任务不执行,报错Run time of job ... was missed by ...
|
6月前
|
存储 JavaScript 前端开发
RxJS中的调度器(Scheduler)机制
RxJS中的调度器(Scheduler)机制
168 0
|
Java 调度
@Scheduled阻塞导致未执行生效
@Scheduled阻塞导致未执行生效
151 0
|
Java API 调度
多线程实现Spring定时任务@Scheduled
多线程实现Spring定时任务@Scheduled