- 浏览: 7979890 次
- 性别:
- 来自: 广州
-
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
在spring 3中,@Async注解能让某个方法快速变为异步执行,马上来先DEMO上手下。
假如在网站的用户注册后,需要发送邮件,然后用户得到邮件确认后才能继续其他工作;
假设发送是一个很耗费时间的过程,因此需要异步。
1 namespace要注意,加上task
2 RegularService.java 注册类
应该是的
nice
返回值为啥就没有异步效果!!
我只能说1楼想多了!
GOOD
返回值为啥就没有异步效果!!
假如在网站的用户注册后,需要发送邮件,然后用户得到邮件确认后才能继续其他工作;
假设发送是一个很耗费时间的过程,因此需要异步。
1 namespace要注意,加上task
<?xml version=”1.0″ encoding=”UTF-8″?> <beans xmlns=”http://www.springframework.org/schema/beans” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:p=”http://www.springframework.org/schema/p” xmlns:context=”http://www.springframework.org/schema/context” 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”> <context:component-scan base-package=”cs”/> </beans>
2 RegularService.java 注册类
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import cs.async.MailUtility; @Service public class RegularService { @Autowired private MailUtility mailUtility ; public void registerUser(String userName){ System.out.println(” User registration for “+userName +” complete”); mailUtility.sendMail(userName); System.out.println(” 注册完成,邮件稍后发送“); } } 3 发送邮件的工具类import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; @Component public class MailUtility { @Async public void sendMail(String name){ System.out.println(” 在做发送准备工作中 “); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(” 异步发送完毕“); } }
4 最后在applicationContext.xml中加入:
<?xml version=”1.0″ encoding=”UTF-8″?> <beans xmlns=”http://www.springframework.org/schema/beans” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:p=”http://www.springframework.org/schema/p” 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“> <context:component-scan base-package=”cs”/> <task:annotation-driven/> </beans>
就是<task:annotation-driven/>这个一定不能少喔。
5 运行:
User registration for tom complete
注册完成,邮件稍后发送
在做发送准备工作中
异步发送完毕
6 有的时候,要从异步中返回值,这个时候,spring会返回一个java.util.concurrent.Future对象,要调用其中的get方法,比如
@Async public Future<Balance> findBalanceAsync(final Account account) { Balance balance = accountRepository.findBalance(account); return new AsyncResult<Balance>(balance); } Balance balance = future.get();
评论
9 楼
jackyrong
2013-04-30
huang_yong 写道
请教一个问题:
若@Async定义在@Service类的方法上,则无法实现异步效果?例如:
以上无法实现异步调用。若在该类中封装一个private方法,则仍然无法实现。
若单独定义一个@Component类,在该类的方法上使用@Async,则可以实现异步效果。例如:
在MailServiceImpl注入MailSender,并调用send方法,这样可以实现异步调用。
若@Async定义在@Service类的方法上,则无法实现异步效果?例如:
@Service public class MailServiceImpl implements MailService { [color=red]@Async[/color] @Override public void sendMail(...) { ... } }
以上无法实现异步调用。若在该类中封装一个private方法,则仍然无法实现。
若单独定义一个@Component类,在该类的方法上使用@Async,则可以实现异步效果。例如:
@Component public class MailSender { [color=red]@Async[/color] public void send(...) { ... } }
在MailServiceImpl注入MailSender,并调用send方法,这样可以实现异步调用。
应该是的
8 楼
huang_yong
2013-04-29
请教一个问题:
若@Async定义在@Service类的方法上,则无法实现异步效果?例如:
以上无法实现异步调用。若在该类中封装一个private方法,则仍然无法实现。
若单独定义一个@Component类,在该类的方法上使用@Async,则可以实现异步效果。例如:
在MailServiceImpl注入MailSender,并调用send方法,这样可以实现异步调用。
若@Async定义在@Service类的方法上,则无法实现异步效果?例如:
@Service public class MailServiceImpl implements MailService { [color=red]@Async[/color] @Override public void sendMail(...) { ... } }
以上无法实现异步调用。若在该类中封装一个private方法,则仍然无法实现。
若单独定义一个@Component类,在该类的方法上使用@Async,则可以实现异步效果。例如:
@Component public class MailSender { [color=red]@Async[/color] public void send(...) { ... } }
在MailServiceImpl注入MailSender,并调用send方法,这样可以实现异步调用。
7 楼
宋建勇
2012-11-21
jd2bs 写道
Future.get() 貌似阻塞的,最好写成
if(Future..isDone()){
Future.get();
}
http://www.cnblogs.com/uptownBoy/articles/1772483.html
if(Future..isDone()){
Future.get();
}
http://www.cnblogs.com/uptownBoy/articles/1772483.html

nice
6 楼
freezingsky
2012-11-19
kjj 写道
宋建勇 写道
不过,从异步中返回值的话就没有达到异步的效果
返回值为啥就没有异步效果!!
我只能说1楼想多了!
5 楼
jackyrong
2012-11-17
jd2bs 写道
Future.get() 貌似阻塞的,最好写成
if(Future..isDone()){
Future.get();
}
http://www.cnblogs.com/uptownBoy/articles/1772483.html
if(Future..isDone()){
Future.get();
}
http://www.cnblogs.com/uptownBoy/articles/1772483.html

GOOD
4 楼
jd2bs
2012-11-17
Future.get() 貌似阻塞的,最好写成
if(Future..isDone()){
Future.get();
}
http://www.cnblogs.com/uptownBoy/articles/1772483.html
if(Future..isDone()){
Future.get();
}
http://www.cnblogs.com/uptownBoy/articles/1772483.html

3 楼
kjj
2012-11-17
宋建勇 写道
不过,从异步中返回值的话就没有达到异步的效果
返回值为啥就没有异步效果!!
2 楼
宋建勇
2012-11-17
不过,从异步中返回值的话就没有达到异步的效果
1 楼
宋建勇
2012-11-17

发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1632方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2038前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3502info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2259import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 511https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 711public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 637https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 692https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 456https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5801 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3129微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 637https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1860什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 986本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1401原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 884public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 696在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 957-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 789一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1924介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
之前大部分都是使用多线程来完成此类任务,但是在 Spring 3.x 之后,就已经内置了 @Async 来完美解决这个问题。 异步调用 异步调用是指在发送调用指令后,不等待被调用方法完全执行完毕,而是继续执行下面的流程。...
在Spring Boot中,可以使用@Async注解来实现异步调用。 使用@Async实现异步调用 在Spring Boot中,使用@Async注解可以将方法异步执行。@Async注解可以应用于方法上,使得该方法可以异步执行。例如: ```java @...
Spring中@Async注解执行异步任务的方法 在业务处理中,有些业务使用异步的方式更为合理。这篇文章主要介绍了Spring中@Async注解执行异步任务的方法。@Async注解是Spring提供的一个annotation,可以将方法异步化,...
Spring 中 @Async 注解的使用 @Async 注解是 Spring 框架提供的一种异步执行方法的实现方式,从 Spring 3.0 版本开始提供。使用 @Async 注解可以将方法标识为异步方法,通过 SimpleAsyncTaskExecutor 执行,但不...
当我们在 Spring 中使用 @Async 注解时,Spring 会扫描方法上是否包含 @Async 注解,如果包含的,Spring 会为该 Bean 动态生成一个代理类,代理类是继承我们所写的 Bean 的,然后把代理类注入进来,那此时,在执行此...
Spring @Async 注解引发其他注解失效的解决 Spring 框架提供了多种注解来帮助开发者简化代码,例如 @Async 用于异步执行方法、@Transaction 用于事务管理等。但是,在使用这些注解时,可能会遇到一些问题,例如 @...
在Spring Boot应用中,我们可以利用`@Async`注解实现异步调用,这有助于提高应用程序的并发性能,尤其在处理耗时操作时。本文将详细介绍如何使用`@Async`结合`Future`来处理异步任务,并探讨如何定义超时。 `@Async...
在Spring Boot中,我们可以使用`@Async`注解将同步方法转换为异步方法。 2. **SpringBoot中的@Async** 要使用`@Async`,首先需要配置一个`TaskExecutor`。Spring Boot默认提供了一个简单的线程池配置,如果需要...
Spring中@Async注解实现异步调用详解 在Spring框架中,@Async注解是实现异步调用的一个重要机制。异步调用是指在程序执行过程中,不需要等待某个方法的执行结果,而是继续执行下一个方法。这种机制可以极大地提高...
【Spring中@Async用法详解及简单实例】 在Spring框架中,@Async注解用于实现异步方法调用,这是Spring 3.x引入的一个特性,旨在简化多线程编程,提高应用程序的性能和响应速度。在传统的同步调用中,程序会按照顺序...
SpringBoot 中 @Async 默认线程池导致 OOM 问题 在 SpringBoot 中使用 @Async 注解来实现异步操作是一种非常常见的做法,但是如果不小心,可能会导致 OOM(Out of Memory)问题。本文将详细介绍 SpringBoot 中 @...
Spring Boot 提供了 @Async 注解,可以将方法异步化,使得方法的调用者不需要等待方法的执行结果,直接返回,而方法的实际执行将提交给 Spring 的 TaskExecutor 中,由指定的线程池中的线程执行。 2. TaskExecutor...
在Spring Boot框架中,@Async注解是实现异步任务处理的关键工具,它允许开发者将耗时的操作从主线程中分离出来,以提高应用程序的响应速度。本文将深入探讨@Async的工作原理、配置方法以及使用场景,帮助你更好地...
Spring 中异步注解 @Async 的使用、原理及使用时可能导致的问题及解决方法 @Async 注解是一种非常有用的spring 注解,它可以让被标注的方法异步执行,从而提高应用程序的性能和响应速度。但是,@Async 注解的使用也...
下面将详细解释如何在Spring Boot中使用`@Async`实现异步调用,以及其背后的原理。 首先,要启用`@Async`注解的功能,需要在Spring Boot的主配置类上添加`@EnableAsync`注解。这会告诉Spring框架,你需要异步任务的...
3. Spring开启异步配置 Spring提供了两种方法来开启异步配置:注解和XML。可以使用@EnableAsync注解来开启异步调用功能,並且可以自定义自己的线程池。 @EnableAsync注解需要配合public AsyncTaskExecutor ...
要在Spring中启用@Async,需要在配置文件中添加@EnableAsync注解。然后,在方法上添加@Async注解,声明该方法为异步调用方法。这样,在执行该方法时,将会在独立的线程中被执行,调用者无需等待它的完成。 四、使用...
在Spring Boot应用中,`@Async`注解是Spring框架提供的异步处理功能,它使得开发者可以方便地实现非阻塞式编程,提高应用程序的执行效率。然而,很多初学者在使用`@Async`时可能会遇到一些误区,导致程序运行结果不...
在Spring框架中,`@Transactional` 和 `@Async` 是两个非常重要的注解,它们分别用于声明事务管理和异步执行。然而,当这两个注解同时出现在一个方法上时,可能会引发一些复杂的问题,特别是在存在循环依赖的情况下...