SpringMVC异步调用,Callable和DeferredResult的使用
Callable和DeferredResult都是springMVC里面的异步调用,Callable主要用来处理一些简单的逻辑,DeferredResult主要用于处理一些复杂逻辑
1.Callable的使用
package com.brian.async; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import java.util.concurrent.Callable; /**
* SpringMVC异步调用 Callable =>执行过程
* 1.控制器返回Callable
* 2.Spring异步调用,将Callable提交到TaskExecutor使用一个隔离的线程进行执行
* 3.DispatcherServlet和所有的Filter退出web容器的线程,而response保持打开的状态
* 4.Callable返回结果,SpringMVC将请求重新派发给容器,并且恢复之前的处理。
* 5.根据Callable返回的结果。SpringMVC继续进行试图渲染流程等等等等。
*/
@Controller
public class Callable01 { @ResponseBody
@RequestMapping("/async01")
public Callable<String> async01() { System.out.println("主线程start...." + Thread.currentThread()+"-"+System.currentTimeMillis());
Callable<String> callable = new Callable<String>() { public String call() throws Exception {
System.out.println("callable线程start...." + Thread.currentThread() + "-" + System.currentTimeMillis());
Thread.sleep(3000);
System.out.println("callable线程end...." + Thread.currentThread() + "-" + System.currentTimeMillis());
return "ok";
}
};
System.out.println("主线程end...." + Thread.currentThread()+"-"+System.currentTimeMillis());
return callable;
} }
2.DeferredResult的使用
package com.brian.async; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.context.request.async.DeferredResult; import java.util.UUID; /**
* DeferredResult异步调用
*
*/
@Controller
public class DeferredResult02 { @RequestMapping("/create")
public DeferredResult<Object> createOrder() {
DeferredResult<Object> deferredResult =
new DeferredResult<Object>((long)15000,"create order fail");
//存放到模拟的队列中
ResultQueue.add(deferredResult);
return deferredResult;
} @RequestMapping("/create/action")
public String createAction() {
DeferredResult<Object> deferredResult = ResultQueue.get();
String order = UUID.randomUUID().toString();
deferredResult.setResult(order);
return " create order id: " + order;
} }
SpringMVC异步调用,Callable和DeferredResult的使用的更多相关文章
- 使用Callable或DeferredResult实现springmvc的异步请求
使用Callable实现springmvc的异步请求 如果一个请求中的某些操作耗时很长,会一直占用线程.这样的请求多了,可能造成线程池被占满,新请求无法执行的情况.这时,可以考虑使用异步请求,即主线程 ...
- 007-优化web请求三-异步调用【WebAsyncTask】
一.什么是同步调用 浏览器发起请求,Web服务器开一个线程处理,处理完把处理结果返回浏览器.好像没什么好说的了,绝大多数Web服务器都如此般处理.现在想想如果处理的过程中需要调用后端的一个业务逻辑服务 ...
- SpringBoot中异步请求和异步调用(看这一篇就够了)
原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10661591.html,否则将追究法律责任!!! 一.SpringBoot中异步请求的使用 ...
- SpringMVC异步处理的 5 种方式
作者:丁仪 来源:https://chengxuzhixin.com/blog/post/SpringMVC-yi-bu-chu-li-de-5-zhong-fang-shi.html 前段时间研究了 ...
- Spring Boot 异步请求和异步调用,一文搞定
一.Spring Boot中异步请求的使用 1.异步请求与同步请求 特点: 可以先释放容器分配给请求的线程与相关资源,减轻系统负担,释放了容器所分配线程的请求,其响应将被延后,可以在耗时处理完成(例如 ...
- Spring中@Async注解实现“方法”的异步调用
原文:http://www.cnblogs.com/zhengbin/p/6104502.html 简单介绍: Spring为任务调度与异步方法执行提供了注解支持.通过在方法上设置@Async注解,可 ...
- Spring源码学习之:@async 方法上添加该注解实现异步调用的原理
在我们使用spring框架的过程中,在很多时候我们会使用@async注解来异步执行某一些方法,提高系统的执行效率.今天我们来探讨下 spring 是如何完成这个功能的. spring 在扫描be ...
- Spring异步调用原理及SpringAop拦截器链原理
一.Spring异步调用底层原理 开启异步调用只需一个注解@EnableAsync @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTI ...
- 5种必会的Java异步调用转同步的方法你会几种
转载请注明本文地址:https://www.jianshu.com/p/f00aa6f66281 源码地址:https://gitee.com/sunnymore/asyncToSync Sunny先 ...
随机推荐
- Copy List with Random Pointer (Hash表)
A linked list is given such that each node contains an additional random pointer which could point t ...
- 学习日常笔记<day12>jsp基础
1.Jsp基础 1.1Jsp引入 Servlet的作用:用java语言开发动态资源的技术 Jsp的作用:用java语言(+html语言)开发动态资源的技术 jsp就是servlet 1.2Jsp的特点 ...
- SSM!这就是你要的条条框框!
第一次写博 1.导jar包 2,.表和实体类 实体类:com.bao.entity[Student] private int stuNo; private String stuName; privat ...
- Maven查看依赖树
1.命令行,但是只能查看一层的引用 mvn dependency:tree 如图所示: 2.使用Eclipse的Dependency Hierarchy查看,这个就比较深层次的查看,如图所示: 3.使 ...
- kis
http://5.xp510.com:801/xp2011/%E9%87%91%E8%9D%B6kis%E4%B8%93%E4%B8%9A%E7%89%88.rar
- 解决Win7 64bit + VS2013 使用opencv时出现提“应用程序无法正常启动(0xc000007b)”错误
应用程序无法正常启动(0xc000007b) 记得以前也遇到过这样的问题:网上的解决方法就是修复什么 今天配置opencv2.4.8+vs2013的时候,发现用老版本的程序是不是都会出现这样的现象啊! ...
- Desert King (poj 2728 最优比率生成树 0-1分数规划)
Language: Default Desert King Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 22113 A ...
- YII获取当前URL
<?php //当前域名 echoYii::app()->request->hostInfo; //除域名外的URL echoYii::app()->request ...
- InfoQ中文站特供稿件:Rust编程语言的核心部件
本文为InfoQ中文站特供稿件.首发地址为: http://www.infoq.com/cn/articles/rust-core-components .如需转载.请与InfoQ中文站联系. 原文发 ...
- Redis5.0之Stream案例应用解读
非常高兴有机会和大家在这里交流Redis5.0之Stream应用.今天的分享更多的是一个抛砖引玉,欢迎大家提出更多关于Redis的思考. 首先,我们来个假设,这里有个杯子,这个杯子是去年我老婆送的,送 ...