栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

记录Java定时器并发执行

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

记录Java定时器并发执行

并发执行定时器任务:

记录一下开发过程中遇到的问题,仅供参考;

正常我们再方法上直接加@Scheduled(cron = “0 */10 * * * ?”)这样的注释的话,同一时间触发的话需要等第一个方法执行完才回去执行下一个方法;我的需求是大概意思是某一个方法需要执行时间较长,我想要他执行期间别的定时器可以正常执行;先上代码:首先需要在 定时器类上加上@EnableAsync注解,方法上加上@Async注解,最后启动类上也需要加上@EnableAsync注解;@EnableAsync注解是开启异步支持;@Async标识该方法异步执行;

@Configuration
@EnableScheduling
@Slf4j
@EnableAsync
public class RuntimeTask {
    @Scheduled(cron = "0 10 * * * ?")
    @Async("taskRuntimeScheduler")
    public void gcTasks(){
        //具体定时业务代码
         for (int i = 0; i < 5; i++) {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            log.info("gcTasks");
        }
    }
    
    @Scheduled(cron = "0 10 * * * ?")
    @Async("taskRuntimeScheduler")
    public void gcTask() {
       	log.info("gcTask");
    }
}

配置类:

@Configuration
@EnableAsync
public class ScheduleConfig {
    @Bean
    public TaskScheduler taskRuntimeScheduler(){
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
        taskScheduler.setPoolSize(10);//设置最大线程数
        taskScheduler.initialize();
        return taskScheduler;
    }
}

这样的话第一个定时器任务和第二个会同时触发。好了,大致就这样吧,反正我这样能行,原理啥的目前还不太懂,小白一个;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/841534.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号