Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 异步线程在SpringMVC3servlet返回之前完成_Java_Multithreading_Spring Mvc_Servlets_Asynchronous - Fatal编程技术网

Java 异步线程在SpringMVC3servlet返回之前完成

Java 异步线程在SpringMVC3servlet返回之前完成,java,multithreading,spring-mvc,servlets,asynchronous,Java,Multithreading,Spring Mvc,Servlets,Asynchronous,我正在尝试实现一个异步控制器,如下例所示: public Callable<Campaign> findCampaignById(@PathVariable Long id) { return new Callable<Campaign>() { @Override public Campaign call() throws Exception { Campaign campaign =

我正在尝试实现一个异步控制器,如下例所示:

public Callable<Campaign> findCampaignById(@PathVariable Long id) {
    return new Callable<Campaign>() {
        @Override
        public Campaign call() throws Exception {           
            Campaign campaign = loadCampaign();
            //Thread.sleep(2000);
            return campaign;
        }
    };                  
}
本教程解释了幕后发生的事情:

客户端发送请求 Servlet容器分配线程并调用其中的Servlet servlet调用request.startAsync,保存AsyncContext并返回 容器线程一直退出,但响应保持打开状态 其他一些线程使用保存的AsyncContext来完成响应 客户端收到响应 问题: 有些情况下,可调用线程可能在servlet返回之前完成。在这种情况下,我得到404页未找到异常。 看起来,如果已经执行了Callable,那么AsyncContext是空的(参见步骤3),因此在步骤5中没有要执行的内容,在步骤6中也没有要返回的内容。 问题: 我做错什么了吗?如何确保在Servlet返回后始终执行Callable?
注意,如果我调用Thread.sleep2000;我从来没有遇到过404异常。

loadCampaign现在真的在做什么,还是只是一个存根实现?另外,异步处理的动机是什么?这个问题显然与Weblogic 12有关。Tomcat中报告了相同的问题,并且已经修复