前提:spring 定时任务,默认是多任务单线程执行,也就是串行执行的

当前需求:

1. 多任务多线程执行(不同的定时任务并行执行)

2.同一个定时任务单线程执行(保证一个定时任务A在执行完成前,A的下一次执行不会开始)

需求实现:

方案一 ,针对@Scheduled的定时任务,增加配置文件,可实现不同@Scheduled定时任务多线程运行,代码如下

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;/*** spring定时任务 多任务多线程配置*/
@Configuration
public class ScheduleConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();//开启5个线程,执行现有的定时任务taskScheduler.setPoolSize(5);//设置线程池中,线程的命名前缀,方便识别那些线程是定时任务的taskScheduler.setThreadNamePrefix("cms-job-");taskScheduler.initialize();scheduledTaskRegistrar.setTaskScheduler(taskScheduler);}
}

方案二 ,原生JDK 实现多任务多线程执行,可以借助ScheduledThreadPool,核心代码如下

//JDK原生代码片段1 创建线程池
//一个任务一个线程池,且线程池中只配置一个执行线程,即实现单任务单线程执行
//如上,多个任务分别创建多个线程池对象ScheduledExecutorService ,即可实现多任务多线程
private static ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);//JDK原生代码片段2 执行定时任务
// 2000代表首次延迟2秒执行
// 30*1000表示执行完成后,30S后再次运行定时任务
// scheduleWithFixedDelay 表示A任务执行完成后,30S后才将下次执行的A任务加入线程池
// scheduleAtFixedRate 表示以A任务开始执行时计时,30S后将下次执行的A任务加入线程队列,此时如果线程池是多个线程,会导致A任务并行执行,慎重
scheduledExecutorService.scheduleWithFixedDelay(() -> {try {execTask()//此处执行你的定时任务} catch (Throwable e) {log.error("充分捕获异常,保证定时任务不中断", e);}}, 2000,30*1000, TimeUnit.MILLISECONDS);

单任务单线程运行,针对@Scheduled,如下两种都是单任务单线程

@Scheduled(initialDelay = 3000, fixedDelay = 30 * 1000)
@Scheduled(cron="${time.cron}")

单任务多线程运行,需配置ScheduleConfig ,且做如下配置

@Scheduled(initialDelay = 3000, fixedRate = 30 * 1000)

spring 定时任务 多任务并行执行,多任务多线程 单任务单线程执行实现细节相关推荐

  1. spring定时任务(Scheduled)运行阻塞不执行/Redission分布式锁阻塞问题

    spring定时任务(Scheduled)运行阻塞不执行/Redission分布式锁阻塞问题 最近项目中发现一个bug,排查了很久,最后发现问题所在,在此记录一下. 问题描述: 项目运行一段时间后,c ...

  2. 多线程和单线程执行效率比较

    单线程的也就是程序执行时,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的彩绘执行到.  多线程嘛,举个例子也就是说程序可以同时执行2个以上相同类似的操作,比如一些搜索代理或者群 ...

  3. Spring定时任务@scheduled多线程的使用(@Async注解)

    1.开篇 在Spring定时任务@Scheduled注解使用方式浅窥这篇文章里面提及过,spring的定时任务默认是单线程的,他在某些场景下会造成堵塞,那么如果我们想让每一个任务都起一条线程去执行呢? ...

  4. Spring定时任务-多线程配置

    目前常见的定时任务框架有Quarts.Elastic-Job.xxl-job等.但其实SpringBoot也有一个内置的定时任务框架,不需要引入额外的Jar,使用Spring自带的注解就可以,比Qua ...

  5. 什么是单线程和多线程,单线程与多线程的区别

    什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的. 什么是线程? 线程是程序中的一个执行流,每个线程都有自己的 ...

  6. 浅谈Spring定时任务

    浅谈Spring定时任务 三种定时任务基于原理 多定时任务并发配置 动态定时任务 定时任务Demo 三种定时任务基于原理 SpringBoot配置定时任务主要有Spring Schedule.JDK自 ...

  7. 【定时任务】——Spring定时任务Scheduled

    定时任务在日常开发过程中非常常见,而且在日常的项目开发中也有多种实现方式,而且做任务调度的框架有很多种,小编最近的感受,如果想真正使用好任务调度还是存在困难的,所以分步学习,逐个击破!在这篇文章小编主 ...

  8. Python多任务(1.多任务的介绍、并发和并行概念及小例子)

    目录 1.多任务的概念 2.单核CPU是怎么解决多任务的? 3.多任务的执行方式:并发和并行 4.单任务的执行例子: 5.多任务的执行例子: 1.多任务的概念 简单地说,就是操作系统可以同一时间执行多 ...

  9. Python 多线程比单线程慢?

    看到一个说多线程比单线程慢的帖子,我惊呆了 赶紧测试了一下 说多线程比单线程慢那兄弟就是喝高了! 单线程和多线程分别进行 10*100万次运算 得出结果,多线程速度远超单线程 至于为什么 绝大多帖都说 ...

最新文章

  1. Error APICloud iOS null is not an object
  2. MyBatis源码-解读Executor的三个实现类之BatchExecutor(批处理执行器)
  3. 【django】查询集QuerySet
  4. GTK+ VS MFC
  5. php fopen 图片下载,php curl与fopen下载远程服务器图片实例
  6. gjr garch Matlab,基于Copula-ARIMA-GJR-GARCH模型的股票指数相关性分析
  7. 数学学习的心理——关于数学中的挫败的反思及若干启示
  8. Semaphore实现原理分析
  9. java输出到txt,换行问题
  10. python pos函数_从0入门Python — 4. 函数
  11. elastic-Job配置参数详细解释
  12. 无法安装程序包“xxx”。你正在尝试将此程序包安装到目标为“.NETFramework,Version=v4.5”的项目中
  13. 好用的网页操作自动化软件
  14. 在哪自学python_怎么自学python,大概要多久?
  15. 【号外】马云这次帮了大忙,银行卡再也不用怕被盗刷!
  16. win10 ST-GCN复现
  17. [Python]networkx入门
  18. mysql5.1为什么programdata文件夹里只有frm文件
  19. java异常排列方式_java中排序报:Comparison method violates its general contract异常的解决...
  20. SpringMVC的执行流程源码分析?

热门文章

  1. 多行宏:未识别的标记
  2. 【教程】好多好看好酷的代码注释,喜欢就选一个;还可以将自己喜欢的图片一键生成代码注释
  3. 新版gsp药店计算机操作规程,2017最新版GSP单体药店质量管理制度及岗位职责及操作规程.doc...
  4. hightcharts制作饼状图
  5. 刀塔omg塔防去限制版使用方法
  6. oracle的索引在哪儿看,Oracle如何查看索引和视图
  7. HIT软件构造——从一个实际案例考察开发质量目标
  8. 苹果id登录_手机小技巧公众号:iPhone忘记ID密码怎么办?不花钱,这波操作帮你轻松解决...
  9. High-grade and low-grade tumor
  10. mysql 和 redis 的区别总结