一个http请求进来tomcat获取其他中间件会有一个线程来处理http请求 ,然后给出一个httpx响应,这是同步处理的方式,
但我们知道像tomcat或中间件这种会有线程数量的限制,当线程数量到达一定程度后,再有请求进来tomcat就无法处理。
对于异步处理,当一个http请求进来以后,tomcat的主线程来调取一个副线程来处理业务逻辑,当副线程处理完后,主线程再返回http响应。在副线程处理业务逻辑中,主线程被空闲处理可以继续处理其他http请求
使用Runnable 异步处理REST服务
先看同步处理
package com.whale.web.async;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AsyncComtroller{
private Logger logger = LoggerFactory.getLogger(getClass());
@RequestMapping("/order")
public String order() throws InterruptedException {
//同步处理的方式
logger.info("主线程开始");
Thread.sleep(1000);
logger.info("主线程返回");
return "success";
}
}
访问 http://127.0.0.1:8080/order
异步处理
@RequestMapping("/order")
public Callable<String> order() throws InterruptedException {
logger.info("主线程开始");
Callable<String> result = new Callable<String