定时任务@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();
    }
相关文章
|
Java Spring
@Scheduled 多个定时任务同时执行
这篇文章主要介绍了springBoot @Scheduled实现多个任务同时开始执行,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
909 0
|
2月前
|
Java 调度 开发者
spring的@Scheduled()有几种定时模式?
【10月更文挑战第12天】spring的@Scheduled()有几种定时模式?
117 1
|
3月前
|
Linux 调度
内核异步处理技术 —— async_schedule
内核异步处理技术 —— async_schedule
|
4月前
|
Kubernetes API 调度
在k8S中,Scheduler作用及实现原理是什么?
在k8S中,Scheduler作用及实现原理是什么?
|
7月前
|
Java 调度 Python
解决方案:APScheduler定时任务不执行,报错Run time of job ... was missed by ...
解决方案:APScheduler定时任务不执行,报错Run time of job ... was missed by ...
856 0
解决方案:APScheduler定时任务不执行,报错Run time of job ... was missed by ...
|
Java 调度
@Scheduled阻塞导致未执行生效
@Scheduled阻塞导致未执行生效
167 0
|
Java Spring
Spring @Scheduled(fixedRate = 120000) 和 @Scheduled(cron = "*/5 * * * * ?")的区别?
Spring @Scheduled(fixedRate = 120000) 和 @Scheduled(cron = "*/5 * * * * ?")的区别?
249 0
|
缓存 NoSQL Java
SpringBoot定时任务@Scheduled的多线程使用
@Scheduled是Spring框架中的一个注解,它可以用于配置定时任务,使得方法可以按照规定的时间间隔定时执行。在使用该注解时,我们可以指定任务的执行时间、循环周期、并发数等参数,从而实现定时任务的功能。在Spring Boot中,@Scheduled注解可以直接应用于方法上。
456 0
|
Java API 调度
多线程实现Spring定时任务@Scheduled
多线程实现Spring定时任务@Scheduled
|
调度
解决使用@Scheduled创建任务时无法在同一时间执行多个任务的BUG
解决使用@Scheduled创建任务时无法在同一时间执行多个任务的BUG
187 0