Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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_Asynchronous_Spring Boot - Fatal编程技术网

Java Spring异步控制器及其实现方法

Java Spring异步控制器及其实现方法,java,spring,asynchronous,spring-boot,Java,Spring,Asynchronous,Spring Boot,我有一个控制器,它接收检查游戏状态的请求,我希望整个过程都是异步完成的。控制器似乎是异步工作的,但是当我执行post请求时,postman挂起 这是我的控制器: @RequestMapping(value = "/status", method = RequestMethod.POST, consumes="application/json") private Callable<Byte> getStatus(@RequestBody final Matrix board){

我有一个控制器,它接收检查游戏状态的请求,我希望整个过程都是异步完成的。控制器似乎是异步工作的,但是当我执行post请求时,postman挂起

这是我的控制器:

@RequestMapping(value = "/status", method = RequestMethod.POST, consumes="application/json")
private Callable<Byte> getStatus(@RequestBody final Matrix board){
    System.out.println("Entering  controller");
    Callable<Byte> asyncResult = new Callable<Byte>() {
        @Override
        public Byte call() throws Exception {
            return status.checkWinner(board);
        }
    };


    System.out.println("Leaving  controller");
    return asyncResult ;

}
程序输出显示如下:

进入控制器

离开控制器

开始缓慢的工作

慢条斯理


所以我试着把
@Async
放在
checkWinner
方法的顶部,邮差显示
200状态ok
,而不显示结果
0
。如果没有
@Async
注释,邮递员(网页)将冻结5秒钟,并显示结果
0

这是一种预期行为。返回的可调用线程在单独的线程池中执行,请求线程可以自由地进行其他处理。但是,与该特定客户端的连接将被打开,并且只有在callable完成后才会响应该客户端。客户端将等待响应,如果在预期时间内未获得响应,则客户端将超时

上述模型仅用于服务器端负载处理,而不是客户端。所以这个模型不适合你


如果希望客户端返回,则应返回jobid作为返回值。为该客户端提供轮询url以检查响应。作业完成后,返回响应。

那么您希望得到什么?
public Byte checkWinner(Matrix board) {

    System.out.println("start Slow work");
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println("finish Slow work");
    return 0;
}