zoukankan      html  css  js  c++  java
  • Spring MVC 异步请求 Callable

    对于有的请求业务处理流程可能比较耗时,比如长查询,远程调用等,主线程会被一直占用,而tomcat线程池线程有限,处理量就会下降

    servlet3.0以后提供了对异步处理的支持,springmvc封装了异步处理,满足用户请求后,主线程很快结束,并开启其它线程处理任务,并将处理结果响应用户,而主线程就可以接收更多请求。

    @Controller
    public class AsycController {
        @RequestMapping("asyc")
        @ResponseBody
        public Callable<String> asyc(){
            System.out.println("主线程开始..."+Thread.currentThread()+"....."+System.currentTimeMillis());
    
            Callable<String> callable=new Callable<String>() {
                public String call() throws Exception {
                    System.out.println("异步线程开始..."+Thread.currentThread()+"....."+System.currentTimeMillis());
                    Thread.sleep(5000);
                    System.out.println("异步线程结束..."+Thread.currentThread()+"....."+System.currentTimeMillis());
                    return "asyc ";
                }
            };
    
    
            System.out.println("主线程结束..."+Thread.currentThread()+"....."+System.currentTimeMillis());
            return callable;
        }
    }

       

    1,springmvc开启副线程处理业务(将Callable 提交到 TaskExecutor)

    2,DispatcherServlet和所有的Filter退出web容器的线程,但是response 保持打开状态

    3,Callable返回结果,SpringMVC将请求front/test重新派发给容器(再重新请求一次asyc),恢复之前的处理;

    4,DispatcherServlet重新被调用,将结果返回给用户

  • 相关阅读:
    LM算法学习笔记(一)
    USB3.0剖析(锆石科技FPGA)
    USB2.0系列(锆石科技FPGA)
    异步FIFO
    总线时钟同步
    [已解决]Mac下Anaconda-Navigator闪退问题
    [已解决]Mac下运行spyder提示"Python 意外退出"
    博客园账号被盗
    unhandled event loop exception解决方案
    初识ListView
  • 原文地址:https://www.cnblogs.com/qin1993/p/11935027.html
Copyright © 2011-2022 走看看