Spring定时任务多线程
单线程
1)在Spring.xml中开启定时器的功能
<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd "><!-- 让Spring找到被@Component注解的类 --><context:component-scan base-package="cn.ltian.base" /><!--定时器开关 --><task:annotation-driven />
2)编写定时器类
package cn.ltian.base;import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date;@Component public class MyScheduler {//每10秒执行一次@Scheduled(cron = "0/2 * * * * ?")public void aTask() {DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(sdf.format(new Date())+" :"+Thread.currentThread().getName()+"a任务执行一次,2m 开始");try{Thread.sleep(5000);}catch(Exception e){}System.out.println(sdf.format(new Date())+" :"+Thread.currentThread().getName()+"a任务执行一次,2m 结束");}//每5秒执行一次@Scheduled(cron = "0/5 * * * * ?")public void bTask() {DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(sdf.format(new Date())+" :"+Thread.currentThread().getName()+"b任务执行一次,5m");} }
3)运行结果
2018-11-13 20:27:20 :pool-1-thread-1a任务执行一次,2m 开始
2018-11-13 20:27:25 :pool-1-thread-1a任务执行一次,2m 结束
2018-11-13 20:27:25 :pool-1-thread-1b任务执行一次,5m
2018-11-13 20:27:26 :pool-1-thread-1a任务执行一次,2m 开始
2018-11-13 20:27:31 :pool-1-thread-1a任务执行一次,2m 结束
2018-11-13 20:27:31 :pool-1-thread-1b任务执行一次,5m
2018-11-13 20:27:32 :pool-1-thread-1a任务执行一次,2m 开始
2018-11-13 20:27:37 :pool-1-thread-1a任务执行一次,2m 结束
2018-11-13 20:27:37 :pool-1-thread-1b任务执行一次,5m
2018-11-13 20:27:38 :pool-1-thread-1a任务执行一次,2m 开始
2018-11-13 20:27:43 :pool-1-thread-1a任务执行一次,2m 结束
2018-11-13 20:27:43 :pool-1-thread-1b任务执行一次,5m
2018-11-13 20:27:44 :pool-1-thread-1a任务执行一次,2m 开始
多线程(同步单任务)
1)在Spring.xml中开启定时器的功能
<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd "><!-- 让Spring找到被@Component注解的类 --> <context:component-scan base-package="cn.ltian.base" /> <!--定时器开关 --> <task:annotation-driven scheduler="MyScheduler"/> <!-- 配置任务线程池 --> <task:scheduler id="MyScheduler" pool-size="4" />
2)编写定时器类
package cn.ltian.base;import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date;@Component public class MyScheduler {//每10秒执行一次@Scheduled(cron = "0/2 * * * * ?")public void aTask() {DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(sdf.format(new Date())+" :"+Thread.currentThread().getName()+"a任务执行一次,2m 开始");try{Thread.sleep(5000);}catch(Exception e){}System.out.println(sdf.format(new Date())+" :"+Thread.currentThread().getName()+"a任务执行一次,2m 结束");}//每5秒执行一次@Scheduled(cron = "0/5 * * * * ?")public void bTask() {DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(sdf.format(new Date())+" :"+Thread.currentThread().getName()+"b任务执行一次,5m");} }
3)运行结果
2018-11-13 20:29:18 :MyScheduler-1a任务执行一次,2m 开始
2018-11-13 20:29:20 :MyScheduler-2b任务执行一次,5m
2018-11-13 20:29:23 :MyScheduler-1a任务执行一次,2m 结束
2018-11-13 20:29:24 :MyScheduler-2a任务执行一次,2m 开始
2018-11-13 20:29:25 :MyScheduler-3b任务执行一次,5m
2018-11-13 20:29:29 :MyScheduler-2a任务执行一次,2m 结束
2018-11-13 20:29:30 :MyScheduler-3b任务执行一次,5m
2018-11-13 20:29:30 :MyScheduler-2a任务执行一次,2m 开始
2018-11-13 20:29:35 :MyScheduler-2a任务执行一次,2m 结束
2018-11-13 20:29:35 :MyScheduler-3b任务执行一次,5m
2018-11-13 20:29:36 :MyScheduler-2a任务执行一次,2m 开始
2018-11-13 20:29:40 :MyScheduler-4b任务执行一次,5m
2018-11-13 20:29:41 :MyScheduler-2a任务执行一次,2m 结束
2018-11-13 20:29:42 :MyScheduler-2a任务执行一次,2m 开始
2018-11-13 20:29:45 :MyScheduler-4b任务执行一次,5m
2018-11-13 20:29:47 :MyScheduler-2a任务执行一次,2m 结束
2018-11-13 20:29:48 :MyScheduler-2a任务执行一次,2m 开始
2018-11-13 20:29:50 :MyScheduler-4b任务执行一次,5m
2018-11-13 20:29:53 :MyScheduler-2a任务执行一次,2m 结束
2018-11-13 20:29:54 :MyScheduler-2a任务执行一次,2m 开始
2018-11-13 20:29:55 :MyScheduler-4b任务执行一次,5m
2018-11-13 20:29:59 :MyScheduler-2a任务执行一次,2m 结束
2018-11-13 20:30:00 :MyScheduler-2a任务执行一次,2m 开始
2018-11-13 20:30:00 :MyScheduler-4b任务执行一次,5m
多线程(异步单任务)
1)在Spring.xml中开启定时器的功能
<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd "><!-- 让Spring找到被@Component注解的类 --><context:component-scan base-package="cn.ltian.base" /><!--定时器开关 --><task:annotation-driven scheduler=" myScheduler"/><!-- 配置任务线程池 --><task:scheduler id="myScheduler" pool-size="4" />
2)编写定时器类
package cn.ltian.base;import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date;@Component public class MyScheduler {//每10秒执行一次@Scheduled(cron = "0/2 * * * * ?")@Async(value="MyScheduler")public void aTask() {DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(sdf.format(new Date())+" :"+Thread.currentThread().getName()+"a任务执行一次,2m 开始");try{Thread.sleep(5000);}catch(Exception e){}System.out.println(sdf.format(new Date())+" :"+Thread.currentThread().getName()+"a任务执行一次,2m 结束");}//每5秒执行一次@Scheduled(cron = "0/5 * * * * ?")public void bTask() {DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(sdf.format(new Date())+" :"+Thread.currentThread().getName()+"b任务执行一次,5m");} }
3)运行结果
2018-11-13 20:32:24 :MyScheduler-2a任务执行一次,2m 开始
2018-11-13 20:32:25 :MyScheduler-3b任务执行一次,5m
2018-11-13 20:32:26 :MyScheduler-3a任务执行一次,2m 开始
2018-11-13 20:32:28 :MyScheduler-4a任务执行一次,2m 开始
2018-11-13 20:32:29 :MyScheduler-2a任务执行一次,2m 结束
2018-11-13 20:32:30 :MyScheduler-2b任务执行一次,5m
2018-11-13 20:32:30 :MyScheduler-1a任务执行一次,2m 开始
2018-11-13 20:32:31 :MyScheduler-3a任务执行一次,2m 结束
2018-11-13 20:32:32 :MyScheduler-3a任务执行一次,2m 开始
2018-11-13 20:32:33 :MyScheduler-4a任务执行一次,2m 结束
2018-11-13 20:32:34 :MyScheduler-4a任务执行一次,2m 开始
2018-11-13 20:32:35 :MyScheduler-1a任务执行一次,2m 结束
2018-11-13 20:32:35 :MyScheduler-2b任务执行一次,5m
2018-11-13 20:32:36 :MyScheduler-2a任务执行一次,2m 开始
2018-11-13 20:32:37 :MyScheduler-3a任务执行一次,2m 结束
2018-11-13 20:32:38 :MyScheduler-3a任务执行一次,2m 开始
转载于:https://www.cnblogs.com/ltian123/p/10027798.html
Spring定时任务多线程相关推荐
- Spring定时任务-多线程配置
目前常见的定时任务框架有Quarts.Elastic-Job.xxl-job等.但其实SpringBoot也有一个内置的定时任务框架,不需要引入额外的Jar,使用Spring自带的注解就可以,比Qua ...
- Spring定时任务@scheduled多线程的使用(@Async注解)
1.开篇 在Spring定时任务@Scheduled注解使用方式浅窥这篇文章里面提及过,spring的定时任务默认是单线程的,他在某些场景下会造成堵塞,那么如果我们想让每一个任务都起一条线程去执行呢? ...
- spring 定时任务 多任务并行执行,多任务多线程 单任务单线程执行实现细节
前提:spring 定时任务,默认是多任务单线程执行,也就是串行执行的 当前需求: 1. 多任务多线程执行(不同的定时任务并行执行) 2.同一个定时任务单线程执行(保证一个定时任务A在执行完成前,A的 ...
- Spring定时任务@Scheduled注解使用配置方式(cron表达式、fixedRate和fixedDelay)
Spring定时任务@Scheduled注解使用配置方式(cron表达式.fixedRate和fixedDelay) 序言: 个人推荐一个很方便的在线Cron生成器(网页版):https://qqe2 ...
- Spring定时任务的几种实现
Spring定时任务的几种实现 spring框架 quartz spring spring-task 定时任务 注解 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信 ...
- (转)Spring定时任务的几种实现
Spring定时任务的几种实现 博客分类: spring框架 quartzspringspring-task定时任务注解 Spring定时任务的几种实现 近日项目开发中需要执行一些定时任务,比如需要 ...
- spring定时任务
使用spring定时任务包Quartz时,必须使用Quartz1.85以下版本的. 查看发现spring3.0.5中org.springframework.scheduling.quartz.Cron ...
- Spring定时任务并行(异步)处理
最近项目中遇到一个问题 , 在SpringBoot中设置了定时任务之后 , 在某个点总是没有执行 . 经过搜索研究发现 , spring 定时器任务scheduled-tasks默认配置是单线程串行执 ...
- spring定时任务执行两次的原因与解决方法
spring定时任务执行两次的原因与解决方法 参考文章: (1)spring定时任务执行两次的原因与解决方法 (2)https://www.cnblogs.com/yolanda-lee/p/7339 ...
最新文章
- 5G+AI:影响未来的新趋势
- IoT	、5G与边缘计算将会擦出怎样的火花?
- Appfuse:记录操作日志
- java 反射 new区别_JAVA的newInstance()和new的区别(JAVA反射机制,通过类名来获取该类的实例化对象)...
- boost::hana::extend用法的测试程序
- SQLServer------聚集索引和非聚集索引的区别
- Redis在持久化时产生的延迟
- java分割例子,Java 分割字符串详解及实例代码
- 【NOIP2017】【Luogu3951】小凯的疑惑
- SugarCRM将告诉你什么是客户关系管理系统中最成功解决方案
- 员工身高体重决定能否晋升?自如回应
- 风湿与类风湿的关系以及风湿病涉及基因突变与基因甲基化的文献收集(仍在更新。。。)
- 53. 验证外星语词典
- java中上传本地图片
- 大数据分析软件都有哪些平台?
- 德信计算机怎么开音乐,计算机模式识德信别 文献阅读.ppt
- http://www.dewen.net.cn/q/14665/个人感觉用二分法最完美的,需要操作系统支持随机读取指定一行的数据,貌似现在还不行,江湖救急呀...
- 指点迷津 北大教授告诉你什么是 C语言!
- 什么是JDBC,JDBC如何使用?
- JS逆向——国税总局发票查验平台