15点睛Spring4.1-TaskExecutor
2024-08-26 13:00:42
转发:https://www.iteye.com/blog/wiselyman-2212679
15.1 TaskExecutor
- spring的TaskExecutor为在spring环境下进行并发的多线程编程提供了支持;
- 使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor;
- 使用@EnableAsync开启异步任务支持;
- 使用@Async注解方法是异步方法;
15.2 示例
15.2.1 声明taskExecutor
package com.wisely.task.executor; import java.util.concurrent.Executor; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @Configuration
@EnableAsync
public class DemoConfig implements AsyncConfigurer{
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(5);
taskExecutor.setMaxPoolSize(10);
taskExecutor.setQueueCapacity(25);
taskExecutor.initialize();
return taskExecutor;
} public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return null;
} }
15.2.2 异步任务实现代码
package com.wisely.task.executor; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; @Component
public class DemoAsyncTask {
@Async
public void executeAsyncTask(Integer i){
System.out.println("执行异步任务:"+i);
} @Async
public void executeAsyncTaskPlus(Integer i){
System.out.println("执行异步任务+1:"+(i+1);
}
}
15.2.3 测试
package com.wisely.task.executor; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main { public static void main(String[] args) {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext("com.wisely.task.executor");
DemoAsyncTask task = context.getBean(DemoAsyncTask.class);
for(int i =0 ;i<10;i++){
task.executeAsyncTask(i);
task.executeAsyncTaskPlus(i);
}
context.close(); } }
输出结果(结果是并发执行而不是顺序执行的):
执行异步任务+1:10
执行异步任务:6
执行异步任务:4
执行异步任务+1:7
执行异步任务:3
执行异步任务:1
执行异步任务:5
执行异步任务:7
执行异步任务+1:8
执行异步任务:8
执行异步任务+1:9
执行异步任务:9
执行异步任务+1:1
执行异步任务:0
执行异步任务+1:2
执行异步任务+1:3
执行异步任务:2
执行异步任务+1:4
执行异步任务+1:5
执行异步任务+1:6
最新文章
- 【云知道】究极秒杀Loadrunner乱码
- C#设计模式之外观
- 点单登录原理和java实现简单的单点登录
- SQL Server数据库连接字符串的组成
- ASP.NET本质论阅读----线程与异步
- hdu oj Period (kmp的应用)
- 域名下Web项目重定向出现DNS域名解析错误问题
- JavaWeb 文件上传 commons_fileupload方式
- Python根据上下限生成不重复随机数1
- ios 基于CAEmitterLayer的雪花,烟花,火焰,爱心等效果demo
- Flex整合Spring
- readelf -s 命令‘symbol’名字显示不全
- 神经网络工具箱nntool的使用方法
- python3.6安装PyQt5
- 下拉框选择selected
- go语言time包的学习(Time,Location,Duration,Timer,Ticker)
- JAVA字符串类
- JQuery中$.cookie()方法的使用[转]
- POJ1966 Cable TV Network
- [转]c++优先队列(priority_queue)用法详解