`
sw1982
  • 浏览: 511259 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Spring3.x中的几个异步执行

 
阅读更多

1.servlet3

细节可以阅读http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/
现在通过使用 Servlet 3.0 的异步处理支持,之前的 Servlet 处理流程可以调整为如下的过程:首先,Servlet 接收到请求之后,可能首先需要对请求携带的数据进行一些预处理;接着,Servlet 线程将请求转交给一个异步线程来执行业务处理,线程本身返回至容器,此时 Servlet 还没有生成响应数据,异步线程处理完业务以后,可以直接生成响应数据(异步线程拥有 ServletRequest 和 ServletResponse 对象的引用),或者将请求继续转发给其它 Servlet。如此一来, Servlet 线程不再是一直处于阻塞状态以等待业务逻辑的处理,而是启动异步线程之后可以立即返回。

 

总结起来,就是1.Servlet线程调用到另外的线程去执行方法,而自身线程将立即释放;节约了宝贵的tomcat并发连接数,也就是同时可以容纳更多的并发。  2.response还是需要等待新线程执行完方法返回的,也就是这个做法,并不会节约客户端的请求回应等待时间。

 

2.TaskExecutor

  private TaskExecutor taskExecutor;

  public TaskExecutorExample(TaskExecutor taskExecutor) {
    this.taskExecutor = taskExecutor;
  }

 这个东西是异步的么?也不一定。线程池提交,解决的是多个人一起去干活,但是单个活的耗时是无法节约的。看doc文档这么写

void org.springframework.core.task.TaskExecutor.execute(Runnable task)

Execute the given task.

The call might return immediately if the implementation uses an asynchronous execution strategy, or might block in the case of synchronous execution.

 

 

3.@Async 

真正的异步调用,调用方不等待函数的返回,最适用于需要立即返回的地方了。

http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling-annotation-support-async

 

The @Async annotation can be provided on a method so that invocation of that method will occur asynchronously. In other words, the caller will return immediately upon invocation and the actual execution of the method will occur in a task that has been submitted to a Spring TaskExecutor. In the simplest case, the annotation may be applied to a void-returning method.
@Async
void doSomething() {
    // this will be executed asynchronously
}

需要返回的时候,必须单独处理 

 

 

@Async
Future<String> returnSomething(int i) {
    // this will be executed asynchronously
} 

 

 

默认用于方法上,但是一样可以作用于spring的executor bean。Executor qualification with @Async 

@Async("otherExecutor")
void doSomething(String s) {
    // this will be executed asynchronously by "otherExecutor"
}

 

 

分享到:
评论

相关推荐

    vert.x中文 PDF 下载

    vert.x的核心概念包括以下几个方面: 1. **事件循环(Event Loop)**:vert.x 使用一组事件循环来处理所有的I/O操作。事件循环是一个不断监听和处理事件的循环,当有新的事件到达时,它会调用相应的回调函数。这种...

    netty4.x 与 spring 集成

    集成Netty4.x与Spring主要涉及以下几个关键步骤和知识点: 1. **创建Netty服务器端** - 定义`ChannelInitializer`,用于初始化`ChannelPipeline`,设置解码器和编码器。 - 创建自定义的`ServerBootstrap`,配置`...

    vert.x-3.4.0.tar.gz

    vert.x 的核心概念有以下几个: 1. **Verticle**:这是vert.x的基本构建单元,可以看作是微服务或轻量级线程。每个verticle都是独立的,有自己的事件循环,可以在自己的上下文中执行代码。 2. **Event Bus**:vert...

    疯狂工作流讲义 基于Activiti 6.x的应用开发

    在Activiti 6.x版本中,主要包含以下几个核心知识点: 1. **Activiti概述**:首先,你需要了解Activiti的基本概念,包括它的起源、设计目标和在BPM领域的地位。Activiti由Alfresco公司开发,旨在提供轻量级、高性能...

    SpringDataRedis.rar

    在SpringDataRedis中,主要知识点包括以下几个方面: 1. **Jedis和Lettuce客户端集成**: - SpringDataRedis支持两种主流的Redis Java客户端:Jedis和Lettuce。Jedis是较早的客户端,轻量级且广泛使用,适合简单...

    SpringBoot面试题 44道.pdf

    SpringBoot Starter 的工作原理是通过@SpringBootApplication 注解自动去 maven 中读取每个 starter 中的 spring.factories 文件,该文件里配置了所有需要被创建 spring 容器中的 bean,并且进行自动配置,把 bean ...

    Struts2+Spring+Hibernate知识点总结

    - **Hibernate的工作原理**主要包括以下几个步骤: 1. **读取配置文件**:读取`hibernate.cfg.xml`和实体映射文件(`*.hbm.xml`),并创建SessionFactory对象。 2. **打开Session**:通过SessionFactory获取Session...

    Spring2.5、3.0、3.1轻松入门+中级+高级教程14合一

    在压缩包的文件中,我们可以看到涵盖了以下几个主题: - **Spring MVC注解例子**: 这个文档将深入讲解如何使用Spring MVC的注解,如`@RequestMapping`、`@PathVariable`和`@RequestParam`来处理HTTP请求,并映射到...

    spring mvc 教程

    3. **与JSF整合**:通过适配层,可以将JSF组件集成到Spring Web Flow中,从而充分利用JSF丰富的组件库。 4. **与Spring Security整合**:安全性的增强是Spring Web Flow 2.0的重要特点之一,通过简单的配置即可实现...

    springboot 同步解耦 异步化

    2. **@Async**:在需要异步执行的方法上添加`@Async`注解,SpringBoot会自动将这个方法放入配置的线程池中执行。这种方法适用于单个方法的异步化。 3. **TaskExecutor**:如果你需要更细粒度的控制,可以自定义`...

    DWR.xml配置文件说明书(含源码)

    有几个术语有必要理解,参数叫做converted,远程Bean叫做created.如果远程Bean A有个方法A.blah(B),那么你需要为A建立一个created,为B建立一个converted. 配置文件init部分声明那些用于建立远程bean和在方法调用中转...

    spring-boot-activemq-demo:带有 ActiveMQ 演示的 Spring Boot

    `spring-boot-activemq-demo-master`这个压缩包中的项目结构可能包括以下几个部分: 1. `src/main/java`: 包含源代码,可能有`Application`启动类、消息监听器和消息发送服务等。 2. `src/main/resources`: 配置文件...

    s2s2.5h3_crud含分页.rar

    在这个项目中,我们可以推测以下几个重要的IT知识点: 1. **CRUD操作**:这是任何数据库应用的基础,CRUD代表创建(Create)、读取(Read)、更新(Update)和删除(Delete)数据的基本操作。在Web开发中,这些功能...

    几个关于java文件上传系统程序的收集

    在本集合中,我们可能会发现几个不同的Java实现,这些实现可以帮助开发者理解如何构建一个有效的文件上传系统。以下是相关的重要知识点: 1. **MultipartFile接口**:在Spring框架中,`MultipartFile`接口是处理...

    海辉面试题

    Spring中如何注入一个ArrayList、HashMap - **ArrayList**:在Spring配置文件中定义bean时,使用`&lt;list&gt;`元素。 - **HashMap**:使用`&lt;map&gt;`元素定义键值对。 #### 8. Struts1.X中struts-config.xml文件的有哪些...

    Java面试框架高频问题2019

    **问题十五:解释一下SpringAOP里面的几个名词** - **Joinpoint**:程序执行过程中的某个点。 - **Pointcut**:匹配Joinpoint的表达式,定义了AOP切面要切入的地方。 - **Advice**:在切点执行时触发的行为。 - **...

    mongodb.zip

    3.5.0版本引入了对MongoDB 3.x系列服务器的全面支持,包括新的写入和读取Concerns,以及对异步驱动程序的支持。 3. **bson-3.5.0.jar**:BSON(Binary JSON)是MongoDB中用于存储和传输数据的格式,类似于JSON但更...

Global site tag (gtag.js) - Google Analytics