Spring Boot 2.x实战51 - Spring Web MVC 23 - 异步请求(Servlet 3.0 异步返回-Callable)

本文介绍了Spring Boot 2.x中如何利用Servlet 3.0的异步返回功能,通过Callable实现异步处理,减少Servlet线程阻碍,提高容器负载能力。详细讲解了Callable的使用方法,包括如何定制线程执行器,并提供了相关代码示例。
摘要由CSDN通过智能技术生成

5. 异步请求

当一个web请求到达了Servlet容器时,Servlet线程将被阻碍直至处理执行完成。这种阻碍称为同步,我们需要通过一些方式来降低Servlet容器的负载。

5.1 Servlet 3.0 异步返回

Spring MVC支持Servlet 3.0提供的异步支持,它将web请求的处理放在另外一个线程中。我们由另外的线程来处理耗时的任务,而让Servlet线程被释放去处理另外的web请求,而不是阻碍Servlet线程。此时的返回(response)还是打开的,当处理完成后,将处理结果返回给客户端。

我们无需与Servlet API进行交互,Spring MVC支持DeferredResultCallable作为控制器方法返回值提供单个值的异步返回。

Callable:当异步运算结束后返回结果;

DeferredResult: 结果由另外一个线程在稍后异步运算后返回。

5.1.1Callable

我们只需将控制器的方法的返回值设置为java.util.concurrent.Callable即可,它会使用Spring MVC提供的TaskExecutorSimpleAsyncTaskExecutor,线程名以MvcAsync打头)来控制线程。

我们定义TaskService用来演示处理:

@Service
@Slf4j
public class TaskService {
   

    public String callableTask() throws InterruptedException{
   
        Thread.sleep(5000); 
        log.info("+++&
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值