Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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 Spring控制器等待异步响应以管理下一个请求_Java_Spring_Multithreading - Fatal编程技术网

Java Spring控制器等待异步响应以管理下一个请求

Java Spring控制器等待异步响应以管理下一个请求,java,spring,multithreading,Java,Spring,Multithreading,我有一个请求端点: @PostMapping("/verify") public Callable<String> verify() { logger.debug("----STARTED REQUEST-----"); Callable<String> callable = () -> { Thread.sleep(5000); logger.debug("_____FINISHED REQUEST_____");

我有一个请求端点:

@PostMapping("/verify")
public Callable<String> verify() {
    logger.debug("----STARTED REQUEST-----");
    Callable<String> callable = () -> {
        Thread.sleep(5000);
        logger.debug("_____FINISHED REQUEST_____");
        return "foo";
    };
    logger.debug("FREED CONTROLLER");
    return callable;
}
我想要的是:

----STARTED REQUEST-----
FREED CONTROLLER
----STARTED REQUEST-----
FREED CONTROLLER
----STARTED REQUEST-----
FREED CONTROLLER
_____FINISHED REQUEST_____
_____FINISHED REQUEST_____
_____FINISHED REQUEST_____

如何实现这一点?

使用
可调用的方法创建服务

@Service
private class TaskService {
    @Async
    public String execute() {
        try {
            Thread.sleep(5000);
            LOGGER.debug("_____FINISHED REQUEST_____");
            return "foo";
        } catch (InterruptedException e) {
            throw new RuntimeException();
        }
    }

}
在控制器中,将callable定义为“TaskService”的execute方法``

@Autowired
TaskService taskService;

@PostMapping("/verify")
public Callable<String> verify() {
    Callable<String> callable = taskservice::execute;

    logger.debug("FREED CONTROLLER");
    return callable;
}

验证中使用线程,例如:

Thread thread =  new Thread()
        {
            @Override
            public void run() 
            {
                System.out.println("Callable");
            }

        };
        thread.start();

谢谢,它正在工作,但前提是我将
@Async
注释添加到
TaskService。执行
方法。事实上,它的日志记录正确,但当我发送请求时,我立即得到空响应,而无需等待。好的,但是控制器不会等待响应。请提供您的MVC配置。
@Configuration
@EnableAsync
public class AsyncConfig extends AsyncConfigurerSupport {
    @Override
    public Executor getAsyncExecutor() {
        return Executors.newWorkStealingPool(); //will use as many threads as your processor has
    }
}
Thread thread =  new Thread()
        {
            @Override
            public void run() 
            {
                System.out.println("Callable");
            }

        };
        thread.start();