spring的异步接口:
我们一般的项目,都是放置于tomcat下面,在tomcat下面的serve.xml配置文件中说道:
The connectors can use a shared executor, you can define one or more named thread pools。
大概的意思就是可以在此处定义一个或者多个线程次,然后下面有一个example:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
其实这个例子也就是tomcat默认的配置,默认的线程数是:150 条线程
所以tomcat里面的线程数也是有限的,当我们的项目达到的并发数,超过了150条线程的负荷,那么就会出现请求没有线程处理,请求出现
阻塞,用户的体验就会下降。初次想到的方案可能是加到tomcat的线程数,但是这是一种指标不治本的做法;
对此,spring中就提供了异步接口
@GetMapping("test")@ResponseBodypublic Callable<String>test (){// tomcat主线程进入到这里,然后委托给其他的线程处理其逻辑,然后回到线程次接下一个请求
Callable<ModelAndView> result =()->{// do something 做程序该做的事情// 这里的返回时Callable接口是有返回值的;return"test";};// 当Callable接口得到结果返回时,这里会通知tomcat线程,将其结果返回return result;}
spring的异步接口: 我们一般的项目,都是放置于tomcat下面,在tomcat下面的serve.xml配置文件中说道: The connectors can use a shared executor, you can define one or more named thread pools。 大概的意思就是可以在此处定义一个或者多个线程次,然后下面有一个example: <...