为什么使用Servlet异步处理

为什么使用Servlet异步处理

更新时间:2017年04月08日

  • 网盘提取码:gtar
  • 适合对象:Java学员、Java爱好者、开发人员
  • qq号:2158476996
一键免费下载

下载介绍

更多>>
为什么使用Servlet异步处理

Servlet 是单例多线程的。当一个请求到达服务器后,服务器会马上为该请求创建一个相 应的 Servlet 线程,为该请求服务。那么,一个请求就一定会有一个 Servlet 线程为之服务吗? 答案是否定的。服务器会为每一个 Servlet 实例创建一个 Servlet 线程池,而线程池中该 Servlet 实例的线程对象并不是“取之不尽”的,而是有上限的。当达到该上限后,再有请求要访问 该 Servlet,那么该请求就只能等待了。只有当又有了空闲的 Servlet 线程对象后才能为该请 求分配 Servlet 线程对象。 对于 Servlet 来说,其最典型的工作一般分为三步:  接收请求提交参数  根据提交参数调用 Service 层代码对参数进行运算  接收到 Service 层的运算结果后,将结果响应给客户端 其中第二步有可能是一个耗时运算。在 Service 层代码对参数进行运算过程中,Servlet 处于阻塞状态,等待着运算结果。如果在 Service 层代码运算过程中,将 Servlet 线程释放回 Servlet 线程池,当 Service 运算结果出来后,再给出用户响应,这样 Servlet 线程就不会被长 时间占用了。而 Servlet3.0 的异步处理,即使用“异步 Servlet 与异步子线程”所完成的异步 处理,解决的就是这个问题。所以每一个请求最好不要长时间占有 Servlet 线程。 一个被占用的 Servlet 线程对象,什么时候会被释放呢?当服务器给出客户端响应后马 上就会释放与该请求相关联的 Servlet 线程,即将 Servlet 线程放回到 Servlet 线程池,然后, 销毁请求 request 与响应 response 对象。所以对于耗时的操作,我们可以使用异步 Servlet, 让该 Servlet 只负责启动这个耗时运算线程即可。该 Servlet 完成启动任务后即可被释放,即 该请求不再占用 Servlet 线程

Java相关视频锦集

返回顶部