Spring注解@Scheduled 多线程异步执行

Easter79
• 阅读 923

一、前言:Spring 定时任务@Schedule的使用方式,默认是单线程同步执行的,启动过程是一个单线程同步启动过程,一旦中途被阻塞,会导致整个启动过程阻塞,

其余的定时任务都不会启动。

二、@Schedule注解多线程的实现:多个定时任务的执行,通过使用@Async注解 来实现多线程异步调用。

    @Scheduled(cron = "0/2 * * * * ?")       //cron表达式,表示每隔两秒钟执行该任务
    @Async
    public void doTask() throws InterruptedException {        System.out.println("当前线程名:"+Thread.currentThread().getName()+"start run Task"); Thread.sleep(6*1000);

   解释:该程序实现了同一任务 多个线程开启的实现。每个任务之间不受影响,即异步执行。该程序的最大线程池默认是@Async的最大容量 100,有时候我们可能不需要那么多,自己可以通过程序去配置一个线程池数量,如下:

三、配置线程池数量

    public class BeanConfig{

        @Bean

        public TaskScheduler taskScheduler(){

              ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();

              taskScheduler .setPoolSize(5);//定义线程池数量为5 个

              return taskScheduler ;

        }

   }

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
@Scheduled注解
1概述@Scheduled注解是springboot提供的用于定时任务控制的注解,主要用于控制任务在某个指定时间执行,或者每隔一段时间执行.注意需要配合@EnableScheduling使用,配置@Scheduled主要有三种配置执行时间的方式,cron,fixedRate,fixedDelay.2croncron是
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
2年前
Spring Boot 动态修改 Scheduled (系统启动默认执行,动态修改)
场景:可配置的Scheduled执行时间,正常的Scheduled 是在项目启动的时候固定死的,没办法根据调用后台代码自动更新Scheduled执行时间例如:系统启动读取时间 Cron: 003\\?,通过执行后台方法可以动态配置 Cron时间格式,并且清楚掉原本执行任务,执行新的设置定时任务时间1、
Wesley13 Wesley13
2年前
4、定时任务关闭超时未支付的订单
//1.在主启动类上加上支持定时任务的注解@EnableSchedulingpublicclassApplication{//2.编写定时任务@ComponentpublicclassOrderJob{@Autowiredp
Wesley13 Wesley13
2年前
Java 定时任务 & 任务调度
任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。方式1:通过Thread来实现例如如下的代码,可以每隔1000毫秒做一次打印操作。publicclassJob_Schedule_Test1{publicstatic
Stella981 Stella981
2年前
SpringBoot集成Schedule任务调度
一、前言:微服务应用中可能会涉及到多个定时任务跨服务同时执行,这里就会涉及到线程生命周期和一致性问题,任务调度器本质上还是单独启动的线程执行,但是生命周期不会随应用的停止而销毁,所以本篇内容只涉及当前应用执行定时任务1、配置启动类!(https://static.oschina.net/uploads/space/2018/060
定时任务原理方案综述 | 京东云技术团队
本文主要介绍目前存在的定时任务处理解决方案。业务系统中存在众多的任务需要定时或定期执行,并且针对不同的系统架构也需要提供不同的解决方案。京东内部也提供了众多定时任务中间件来支持,总结当前各种定时任务原理,从定时任务基础原理、单机定时任务(单线程、多线程)、分布式定时任务介绍目前主流的定时任务的基本原理组成、优缺点等。希望能帮助读者深入理解定时任务具体的算法和实现方案。
京东云开发者 京东云开发者
7个月前
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k