tomcat中Servlet对象池介绍及如何使用

 更新时间:2016年12月31日 11:50:23   投稿:lqh  
这篇文章主要介绍了tomcat中Servlet对象池介绍及简单使用的相关资料,需要的朋友可以参考下

tomcat中Servlet对象池

Servlet在不实现SingleThreadModel的情况下运行时是以单个实例模式,如下图,这种情况下,Wrapper容器只会通过反射实例化一个Servlet对象,对应此Servlet的所有客户端请求都会共用此Servlet对象,而对于多个客户端请求tomcat会使用多线程处理,所以应该保证此Servlet对象的线程安全,多个线程不管执行顺序如何都能保证执行结果的正确性。例如刚做web应用开发时可能会犯的一个错误:在某个Servlet中使用成员变量累加去统计访问次数,这就存在线程安全问题。

为了支持一个Servlet对象对应一个线程,Servlet规范提出了一个SingleThreadModel接口,tomcat容器必须要完成的机制是:如果某个Servlet类实现了SingleThreadModel接口则要保证一个线程独占一个Servlet对象。假如线程1正在使用Servlet对象1,则线程2只能用Servlet对象2。

针对SingleThreadModel模式,tomcat的Wrapper容器使用了对象池策略,Wrapper容器会有一个Servlet堆保存若干个该Servlet对象,当需要该Servlet对象时从堆中pop一个对象,而当用完后则push回堆中。Wrapper容器中最多可以有20个该Servlet对象,例如xxxServlet类的对象池,已经有20个线程占用了20个对象,那么第21个线程执行时就会阻塞等待,直到对象池中有可用的对象才继续执行。

整个流程如下图所示,某个线程处理客户端请求,它首先尝试从Servlet对象池中获取Servlet对象,此时如果对象池有可用对象则直接返回一个对象,如果不够使用则继续实例化Servlet对象并push进对象池,但Servlet对象的总数量必须保证在20个以内,如果20个Servlet对象都被其他线程使用了,那么就必须要等到其他线程用完放回后才能获取,此时该线程会一直阻塞等待。从对象池中获取到Servlet对象后则调用Servlet对象的service方法对客户端请求进行处理,处理完后再将Servlet对象放回对象池中。

本节介绍了Servlet对象池,它是为了支持Servlet规范SingleThreadModel接口而引入的,它就是一个栈结构,需要时就pop一个对象,使用完就push回去。

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • 传统tomcat启动服务与springboot启动内置tomcat服务的区别(推荐)

    传统tomcat启动服务与springboot启动内置tomcat服务的区别(推荐)

    这篇文章主要介绍了传统tomcat启动服务与springboot启动内置tomcat服务的区别,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • Window下安装Tomcat服务器的教程

    Window下安装Tomcat服务器的教程

    这篇文章主要介绍了Window下安装Tomcat服务器的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2020-03-03
  • 如何设置Tomcat的默认端口(图文)

    如何设置Tomcat的默认端口(图文)

    Tomcat安装时默认的端口设置的是8080,而http协议的默认端口是80,所以测试Tomcat时需要输入的网址为“http://localhost:8080”,若把Tomcat的端口设置为80,则直接输入“http://localhost”就能显示Tomcat默认主页,下面我们来分享下,方便需要的朋友
    2014-06-06
  • Tomcat服务配置和自启动详解

    Tomcat服务配置和自启动详解

    这篇文章主要为大家详细介绍了Tomcat服务配置和自启动的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • window7下Tomcat7.0安装配置方法

    window7下Tomcat7.0安装配置方法

    这篇文章主要介绍了window7下Tomcat7.0安装配置方法,需要的朋友可以参考下
    2014-07-07
  • 优化Tomcat配置(内存、并发、缓存等方面)方法详解

    优化Tomcat配置(内存、并发、缓存等方面)方法详解

    这篇文章主要介绍了优化Tomcat配置(内存、并发、缓存等方面)方法详解,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • Tomcat实现WebSocket的方法

    Tomcat实现WebSocket的方法

    WebSocket协议属于HTML5标准,越来越多浏览器已经原生支持WebSocket,它能让客户端和服务端实现双向通信。这篇文章主要介绍了Tomcat实现WebSocket的方法的相关资料,需要的朋友可以参考下
    2016-11-11
  • 解决tomcat 静态页面(html)中文乱码的解决终极篇

    解决tomcat 静态页面(html)中文乱码的解决终极篇

    这篇文章主要介绍了解决tomcat 静态页面(html)中文乱码的解决终极篇,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • tomcat虚拟路径的配置方法汇总

    tomcat虚拟路径的配置方法汇总

    本文给大家简单汇总介绍了tomcat虚拟路径的配置方法,十分的简单实用,有需要的小伙伴可以参考下。
    2016-01-01
  • linux系统中修改tomcat默认输入日志路径的方法

    linux系统中修改tomcat默认输入日志路径的方法

    本文给大家介绍了linux系统中修改tomcat默认输入日志路径的方法,文中只是给大家介绍linux系统修改默认logs的方法,windows系统类似,需要的朋友可以参考下
    2018-03-03

最新评论