之前研究了下servlet的异步和非阻塞原理,看到一篇文章,下面有两个问题,顺便解答了下
servlet3异步原理与实践
Danniel
3楼 2019.05.18 21:31
请问,AsyncLongRunningServlet.java中使用了ThreadPool,其实在Servlet3.0之前,我们不也可以用ThreadPool实现异步(将request和response对象传入即可)吗???这个servlet3.0的异步的真正意义在哪里呢?指教
foolgry
02.26 16:43
将response对象传入自定义线程池中的线程,这个response对象是和tomcat线程池绑定的,也就是说,虽然你异步了,但是tomcat的工作线程还是没有释放,资源还是在占用。而servlet3.0的异步指的是tomcat的工作线程已经还给线程池,这里异步真正的意思是tomcat的工作线程和业务线程的异步,tomcat的工作线程不用同步等待业务线程的结果,而你利用线程池实现的,tomcat的工作线程还是没有释放,还是在同步等待。
所以总结下,
- 异步是针对tomcat的工作线程来说的,不是自己起的异步线程来说
- resp