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的核心概念包括以下几个方面: 1. **事件循环(Event Loop)**:vert.x 使用一组事件循环来处理所有的I/O操作。事件循环是一个不断监听和处理事件的循环,当有新的事件到达时,它会调用相应的回调函数。这种...
集成Netty4.x与Spring主要涉及以下几个关键步骤和知识点: 1. **创建Netty服务器端** - 定义`ChannelInitializer`,用于初始化`ChannelPipeline`,设置解码器和编码器。 - 创建自定义的`ServerBootstrap`,配置`...
vert.x 的核心概念有以下几个: 1. **Verticle**:这是vert.x的基本构建单元,可以看作是微服务或轻量级线程。每个verticle都是独立的,有自己的事件循环,可以在自己的上下文中执行代码。 2. **Event Bus**:vert...
在Activiti 6.x版本中,主要包含以下几个核心知识点: 1. **Activiti概述**:首先,你需要了解Activiti的基本概念,包括它的起源、设计目标和在BPM领域的地位。Activiti由Alfresco公司开发,旨在提供轻量级、高性能...
在SpringDataRedis中,主要知识点包括以下几个方面: 1. **Jedis和Lettuce客户端集成**: - SpringDataRedis支持两种主流的Redis Java客户端:Jedis和Lettuce。Jedis是较早的客户端,轻量级且广泛使用,适合简单...
SpringBoot Starter 的工作原理是通过@SpringBootApplication 注解自动去 maven 中读取每个 starter 中的 spring.factories 文件,该文件里配置了所有需要被创建 spring 容器中的 bean,并且进行自动配置,把 bean ...
- **Hibernate的工作原理**主要包括以下几个步骤: 1. **读取配置文件**:读取`hibernate.cfg.xml`和实体映射文件(`*.hbm.xml`),并创建SessionFactory对象。 2. **打开Session**:通过SessionFactory获取Session...
在压缩包的文件中,我们可以看到涵盖了以下几个主题: - **Spring MVC注解例子**: 这个文档将深入讲解如何使用Spring MVC的注解,如`@RequestMapping`、`@PathVariable`和`@RequestParam`来处理HTTP请求,并映射到...
3. **与JSF整合**:通过适配层,可以将JSF组件集成到Spring Web Flow中,从而充分利用JSF丰富的组件库。 4. **与Spring Security整合**:安全性的增强是Spring Web Flow 2.0的重要特点之一,通过简单的配置即可实现...
2. **@Async**:在需要异步执行的方法上添加`@Async`注解,SpringBoot会自动将这个方法放入配置的线程池中执行。这种方法适用于单个方法的异步化。 3. **TaskExecutor**:如果你需要更细粒度的控制,可以自定义`...
有几个术语有必要理解,参数叫做converted,远程Bean叫做created.如果远程Bean A有个方法A.blah(B),那么你需要为A建立一个created,为B建立一个converted. 配置文件init部分声明那些用于建立远程bean和在方法调用中转...
`spring-boot-activemq-demo-master`这个压缩包中的项目结构可能包括以下几个部分: 1. `src/main/java`: 包含源代码,可能有`Application`启动类、消息监听器和消息发送服务等。 2. `src/main/resources`: 配置文件...
在这个项目中,我们可以推测以下几个重要的IT知识点: 1. **CRUD操作**:这是任何数据库应用的基础,CRUD代表创建(Create)、读取(Read)、更新(Update)和删除(Delete)数据的基本操作。在Web开发中,这些功能...
在本集合中,我们可能会发现几个不同的Java实现,这些实现可以帮助开发者理解如何构建一个有效的文件上传系统。以下是相关的重要知识点: 1. **MultipartFile接口**:在Spring框架中,`MultipartFile`接口是处理...
Spring中如何注入一个ArrayList、HashMap - **ArrayList**:在Spring配置文件中定义bean时,使用`<list>`元素。 - **HashMap**:使用`<map>`元素定义键值对。 #### 8. Struts1.X中struts-config.xml文件的有哪些...
**问题十五:解释一下SpringAOP里面的几个名词** - **Joinpoint**:程序执行过程中的某个点。 - **Pointcut**:匹配Joinpoint的表达式,定义了AOP切面要切入的地方。 - **Advice**:在切点执行时触发的行为。 - **...
3.5.0版本引入了对MongoDB 3.x系列服务器的全面支持,包括新的写入和读取Concerns,以及对异步驱动程序的支持。 3. **bson-3.5.0.jar**:BSON(Binary JSON)是MongoDB中用于存储和传输数据的格式,类似于JSON但更...