转发: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
 

最新文章

  1. 【云知道】究极秒杀Loadrunner乱码
  2. C#设计模式之外观
  3. 点单登录原理和java实现简单的单点登录
  4. SQL Server数据库连接字符串的组成
  5. ASP.NET本质论阅读----线程与异步
  6. hdu oj Period (kmp的应用)
  7. 域名下Web项目重定向出现DNS域名解析错误问题
  8. JavaWeb 文件上传 commons_fileupload方式
  9. Python根据上下限生成不重复随机数1
  10. ios 基于CAEmitterLayer的雪花,烟花,火焰,爱心等效果demo
  11. Flex整合Spring
  12. readelf -s 命令‘symbol’名字显示不全
  13. 神经网络工具箱nntool的使用方法
  14. python3.6安装PyQt5
  15. 下拉框选择selected
  16. go语言time包的学习(Time,Location,Duration,Timer,Ticker)
  17. JAVA字符串类
  18. JQuery中$.cookie()方法的使用[转]
  19. POJ1966 Cable TV Network
  20. [转]c++优先队列(priority_queue)用法详解

热门文章

  1. 洛谷 P1199 三国游戏 题解
  2. win32线程栈溢出问题 (一)
  3. 【JS】闭包的理解
  4. kafka Auto offset commit faild reblance
  5. (17)打鸡儿教你Vue.js
  6. JSP迭代标签
  7. 依赖倒置原则(DIP)
  8. 树莓派VNC
  9. Flink 之 Data Sink
  10. sqlserver2016 kb补丁