Java 异步响应servlet_为什么使用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 线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值