本篇主要描述一下spring的多线程的使用与定时任务的使用.

1.spring多线程任务的使用
spring通过任务执行器TaskExecutor来实现多线程与并发编程。通常使用ThreadPoolTaskExecutor来实现一个基于线程池的TaskExecutor.
首先你要实现AsyncConfigurer 这个接口,目的是开启一个线程池
代码如下:
package com.foreveross.service.weixin.test.thread;
import java.util.concurrent.Executor;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
/**
* 注入一个线程池
* @author mingge
*
*/
@Configuration
@ComponentScan("com.foreveross.service.weixin.test.thread")
@EnableAsync
public class TaskExecutorConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor taskExecutor=new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(5);
taskExecutor.setMaxPoolSize(20);
taskExecutor.setQueueCapacity(25);
taskExecutor.initialize();
return taskExecutor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return null;
}
}
然后注入一个类,实现你的业务,并在你的Bean的方法中使用@Async注解来声明其是一个异步任务
代码如下:
package com.foreveross.service.weixin.test.thread;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
/**
* 线程池任务
* @author mingge
*
*/
@Service
public class TaskService {
@Async
public void executeAsyncTask(int i){
System.out.println("执行异步任务:"+i);
}
@Async
public void executeAsyncTask1(int i){
System.out.println("执行异步任务1:"+(i+i));
}
}
最后通过测试,可以看到你的实现是异步执行了.
package com.foreveross.service.weixin.test.thread;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
*
* @author mingge
*
*/
public class Test {
public static void main(String[] args) {
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(TaskExecutorConfig.class);
TaskService taskService=context.getBean(TaskService.class);
for(int i=0;i<20;i++){
taskService.executeAsyncTask(i);
taskService.executeAsyncTask1(i);
}
//最后可以根据结果可以看出结果是并发执行而不是顺序执行的呢
context.close();
}
}
2.spring定时任务的使用
在java原生态中,我们使用timer就可以了,这里小编说一些在Spring中的定时任务的使用
package com.foreveross.service.weixin.test.thread;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
@Configuration
@ComponentScan("com.foreveross.service.weixin.test.thread")
@EnableScheduling//开启对定时器的支持
public class TaskSchedulerConfig {
}
package com.foreveross.service.weixin.test.thread;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class TimerTaskJob {
@Scheduled(fixedRate=2000)
public void test(){
System.out.println("我是定时任务:"+new Date().getSeconds());
}
}
package com.foreveross.service.weixin.test.thread;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class TestTimer {
public static void main(String[] args) {
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(TaskSchedulerConfig.class);
//context.close();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# spring
# 定时器
# 多线程
# 多线程任务
# spring定时任务多线程
# 浅谈Spring学习之request
# session与globalSession作用域
# 基于Spring中的线程池和定时任务功能解析
# Spring中如何获取request的方法汇总及其线程安全性分析
# 来实现
# 是一个
# 我是
# 你要
# 并在
# 可以看到
# 可以看出
# 可以根据
# 小编
# 大家多多
# 就可以
# 而不是
# 原生态
# 执行器
# 结果是
# 目的是
# springframework
# TaskExecutorConfig
# interceptor
相关文章:
如何通过WDCP绑定主域名及创建子域名站点?
如何撰写建站申请书?关键要点有哪些?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
如何挑选优质建站一级代理提升网站排名?
定制建站是什么?如何实现个性化需求?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
如何在腾讯云服务器快速搭建个人网站?
高防服务器租用如何选择配置与防御等级?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
焦点电影公司作品,电影焦点结局是什么?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
如何在阿里云域名上完成建站全流程?
网站制作公司排行榜,四大门户网站排名?
Python路径拼接规范_跨平台处理说明【指导】
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
想学网站制作怎么学,建立一个网站要花费多少?
Android使用GridView实现日历的简单功能
建站主机服务器选型指南与性能优化方案解析
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
建站主机服务器选购指南:轻量应用与VPS配置解析
如何在Windows服务器上快速搭建网站?
如何选择美橙互联多站合一建站方案?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
如何构建满足综合性能需求的优质建站方案?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
如何规划企业建站流程的关键步骤?
Thinkphp 中 distinct 的用法解析
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
建站之星logo尺寸如何设置最合适?
济南企业网站制作公司,济南社保单位网上缴费步骤?
官网网站制作腾讯审核要多久,联想路由器newifi官网
网站制作价目表怎么做,珍爱网婚介费用多少?
北京的网站制作公司有哪些,哪个视频网站最好?
Bpmn 2.0的XML文件怎么画流程图
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
如何通过西部数码建站助手快速创建专业网站?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
如何配置WinSCP新建站点的密钥验证步骤?
如何通过VPS建站实现广告与增值服务盈利?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
如何在阿里云购买域名并搭建网站?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
网站制作网站,深圳做网站哪家比较好?
如何在西部数码注册域名并快速搭建网站?
如何生成腾讯云建站专用兑换码?
如何快速登录WAP自助建站平台?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
*请认真填写需求信息,我们会在24小时内与您取得联系。