文档章节

利用spring3.0+特性之开启多线程

月夜筱风
 月夜筱风
发布于 2016/08/10 23:59
字数 652
阅读 72
收藏 0

第一篇博客,想象还有点小激动,不足之处,需要大神们多指点

Spring的多线程,可以大大加快返回速度响应。如果公司不使用Mq,或者kafka等,或者不想用java原始的写法,可以考虑利用spring的这个高级特性 示例上使用springboot和thymeleaf快速搭建的项目,为了测试简单,代码就直接写在controller中了

第一步 在类上加上注释**@EnableAsync**(org.springframework.scheduling.annotation.EnableAsync) 表示让这个类支持spring多线程, 代码如下:

@Controller
/**表示支持多线程*/
@EnableAsync
public class TestController {
	
	@Autowired
	private AsyncTaskService asyncTaskService;
	
	
	/**
	 * 主页
	 */
	@RequestMapping(value="/")
	public String getTest(){
		//测试异步操作
		for (int j = 0; j < 10; j++) {
			asyncTaskService.exectueAsyncTask(j);
			asyncTaskService.exectueAsyncTask2(j);
		}
		return "index";
	}

** 第二步,在方法上添加@Async**,org.springframework.scheduling.annotation.Async,表示是一个异步方法 代码如下:

@Service
public class AsyncTaskService {
	/**
	 * 表示是一个异步任务
	 */
	@Async
	public void exectueAsyncTask(Integer i){
		System.out.println("第一个任务的第"+i+"个");	
	}
	
	/**
	 * 表示是一个异步任务
	 */
	@Async
	public void exectueAsyncTask2(Integer i){
		System.out.println("第二个任务的第"+i+"个");	
	}
}

结果如下(可以看到并不是按照顺序执行的):

	第二个任务的第0个
	第一个任务的第8个
	第一个任务的第9个
	第二个任务的第2个
	第一个任务的第1个
	第二个任务的第3个
	第二个任务的第4个
	第二个任务的第5个
	第二个任务的第6个
	第一个任务的第2个
	第二个任务的第7个
	第一个任务的第3个
	第一个任务的第4个
	第二个任务的第8个
	第二个任务的第9个
	第一个任务的第5个
	第一个任务的第6个
	第一个任务的第7个
	第二个任务的第1个

如果2个注解任何一个不加,结果如下(按照顺序执行的):

	第二个任务的第0个
	第一个任务的第1个
	第二个任务的第1个
	第一个任务的第2个
	第二个任务的第2个
	第一个任务的第3个
	第二个任务的第3个
	第一个任务的第4个
	第二个任务的第4个
	第一个任务的第5个
	第二个任务的第5个
	第一个任务的第6个
	第二个任务的第6个
	第一个任务的第7个
	第二个任务的第7个
	第一个任务的第8个
	第二个任务的第8个
	第一个任务的第9个
	第二个任务的第9个

© 著作权归作者所有

共有 人打赏支持
月夜筱风
粉丝 0
博文 55
码字总数 19574
作品 0
闵行
程序员
私信 提问
iOS基础知识整理之多线程技术

多线程技术 多线程(multithreading) 是指软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。 原理...

无忌不悔
11/07
0
0
Golang实现简单tcp服务器01 -- 概述

概述 Golang作为一门近些年来非常风光的开发语言, 其实用范围很广, 图形界面, web框架, 图像引擎等等. 由于其语言特性简化了并发/多核的开发, 受到了很大的关注. 而使用它进行服务器开发, 也...

victoriest
2015/06/02
0
0
高性能缓存服务器 nuster v1.8.8.1 支持 HTTP/2,多线程

高性能缓存服务器 nuster v1.8.8.1 已发布。本次更新主要是升级到 HAProxy v1.8.8, 支持 HTTP/2 和多线程。 项目主页 https://github.com/jiangwenyuan/nuster 介绍 nuster 是一个基于 HAPr...

nuster
05/08
0
0
spring+ibatis整合之jar包引入配置篇

1.spring-2.5.6.SEC03,再加上spring-webmvc- 3.2.3,马上动手springmvc的工作, 2.使用了spring的注解方式,发生了在spring-2.5.6.SEC03的spring-core包缺少对springmvc的@Controller等一些的...

无起
2012/12/28
0
1
那些年我们一起追逐的多线程(Thread、ThreadPool、委托异步调用、Task/TaskFactory、Parallerl、async和await)

一. 背景   在刚接触开发的头几年里,说实话,根本不考虑多线程的这个问题,貌似那时候脑子里也有没有多线程的这个概念,所有的业务都是一个线程来处理,不考虑性能问题,当然也没有考虑多...

Yaopengfei
06/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL Replication 梳理详解

MySQL Replication 1 MySQL5.5以前的复制 异步、SQL线程串行化回放 MySQL内建的复制功能是构建大型,高性能应用程序的基础。主服务器将更新写入二进制日志文件,从服务器重新执行一遍来实现的...

PeakFang-BOK
14分钟前
1
0
.NET Core & ConsoleApp & appsettings.json

准备 Visual Studio 2017 .NET Core 2.1 新建控制台应用(.NET Core) 默认的 Program.cs // Program.csusing System;namespace ConsoleApp1{ class Program { static voi......

taadis
24分钟前
1
0
结合lucene谈谈日期的压缩问题

说起日期值的压缩,一般容易想到的办法是将日期转化成long类型,然后再通过变长整形进行压缩,我算了一下按照毫秒来算最多占用5个字节(可以通过“谈谈变长整型”中的表查看),确实节省了部...

FAT_mt
今天
1
0
导出私有函数与私有变量

在Go语言中, package中包含函数与变量通过identifier的首字母是否大写来决定它是否可以被其它package所访问。当一个函数或变量名称为小写字母时,默认是无法被其他package引用的. 有没有办法...

xtof
今天
1
0
new Date() 在Safari下的 Invalid Date问题

问题复现 var timeStr = '2018-11-11 00:00:00';var time = new Date(timeStr);// error: Invalid Date... 在safari浏览器下,time为Invalid Date, 导致后面代码执行错误; 其他浏览器诸...

会写代码的husky
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部