`
lijackly
  • 浏览: 72374 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

几种开源Java Web容器线程池的实现方法简介——Tomcat(一)

阅读更多

   目前市场上常用的开源Java Web容器有Tomcat、Resin和Jetty。其中Resin从V3.0后需要购买才能用于商业目的,而其他两种则是纯开源的。可以分别从他们的网站上下载最新的二进制包和源代码。

    作为Web容器,需要承受较高的访问量,能够同时响应不同用户的请求,能够在恶劣环境下保持较高的稳定性和健壮性。在HTTP服务器领域,Apache HTTPD的效率是最高的,也是最为稳定的,但它只能处理静态页面的请求,如果需要支持动态页面请求,则必须安装相应的插件,比如mod_perl可以处理Perl脚本,mod_python可以处理Python脚本。

    上面介绍的三中Web容器,都是使用Java编写的HTTP服务器,当然他们都可以嵌到Apache中使用,也可以独立使用。分析它们处理客户请求的方法有助于了解Java多线程和线程池的实现方法,为设计强大的多线程服务器打好基础。

    Tomcat是使用最广的Java Web容器,功能强大,可扩展性强。最新版本的Tomcat(5.5.17)为了提高响应速度和效率,使用了Apache Portable Runtime(APR)作为最底层,使用了APR中包含Socket、缓冲池等多种技术,性能也提高了。APR也是Apache HTTPD的最底层。可想而知,同属于ASF(Apache Software Foundation)中的成员,互补互用的情况还是很多的,虽然使用了不同的开发语言。

    Tomcat 的线程池位于tomcat-util.jar文件中,包含了两种线程池方案。方案一:使用APR的Pool技术,使用了JNI;方案二:使用Java实现的ThreadPool。这里介绍的是第二种。如果想了解APR的Pool技术,可以查看APR的源代码。

    ThreadPool默认创建了5个线程,保存在一个200维的线程数组中,创建时就启动了这些线程,当然在没有请求时,它们都处理“等待”状态(其实就是一个while循环,不停的等待notify)。如果有请求时,空闲线程会被唤醒执行用户的请求。

    具体的请求过程是: 服务启动时,创建一个一维线程数组(maxThread=200个),并创建空闲线程(minSpareThreads=5个)随时等待用户请求。 当有用户请求时,调用 threadpool.runIt(ThreadPoolRunnable)方法,将一个需要执行的实例传给ThreadPool中。其中用户需要执行的实例必须实现ThreadPoolRunnable接口。 ThreadPool首先查找空闲的线程,如果有则用它运行要执行 ThreadPoolRunnable;如果没有空闲线程并且没有超过maxThreads,就一次性创建minSpareThreads个空闲线程;如果已经超过了maxThreads了,就等待空闲线程了。总之,要找到空闲的线程,以便用它执行实例。找到后,将该线程从线程数组中移走。 接着唤醒已经找到的空闲线程,用它运行执行实例(ThreadPoolRunnable)。 运行完ThreadPoolRunnable后,就将该线程重新放到线程数组中,作为空闲线程供后续使用。

    由此可以看出,Tomcat的线程池实现是比较简单的,ThreadPool.java也只有840行代码。用一个一维数组保存空闲的线程,每次以一个较小步伐(5个)创建空闲线程并放到线程池中。使用时从数组中移走空闲的线程,用完后,再“归还”给线程池。


分享到:
评论
1 楼 rocksun21 2010-06-07  
估计大家都对apr的实现非常感兴趣。

相关推荐

    Tomcat与Java.Web开发技术详解

    【标题】"Tomcat与Java.Web开发技术详解"揭示了Java Web开发中核心的服务器端技术——Apache Tomcat,以及其在实际应用中的深度实践。Tomcat是一个开源的、轻量级的应用服务器,主要用于部署Java Servlet和Java...

    Tomcat服务器开发源码

    开发者对Tomcat进行了修改和扩展,使其不仅支持基础的Servlet容器功能,还能够处理JSP(JavaServer Pages)——一种动态网页技术。这表明该版本的Tomcat可能已经包含了Jasper引擎,用于编译和执行JSP页面。对于想要...

    apache-tomcat6and7

    Apache Tomcat 是一款广泛应用的开源Java Servlet容器,它实现了Java EE中的Web应用程序规范,特别是Servlet和JSP。这个压缩包包含的是Apache Tomcat 6和7的版本,这两个版本在过去的几年里都是非常流行的选择,用于...

    apache-tomcat-8.5.11

    Apache Tomcat 8.5.11 是一个广泛使用的开源软件,它是一个实现了Java Servlet、JavaServer Pages(JSP)和Java EE的Web应用程序容器。这个版本是免安装包的形式,意味着用户可以直接解压并运行,无需进行繁琐的安装...

    tomcat7 64位

    Apache Tomcat 7.0.73 是一个广泛使用的开源软件,它是一个符合Java Servlet和JavaServer Pages(JSP)规范的应用服务器,专门用于运行基于Java的Web应用程序。64位版本的Tomcat是为了在64位操作系统上提供更高效、...

    Michael Osipov's Apache Tomcat Extras:Apache Tomcat的额外组件-开源

    Apache Tomcat是一个非常流行的开源Java Servlet容器,它用于部署和运行Java Web应用程序。"Michael Osipov's Apache Tomcat Extras"是针对这个容器的一系列额外组件,这些组件旨在增强Tomcat的功能并提供额外的工具...

    Apache Tomcat v9.0.14

    Apache Tomcat v9.0.14是一款广泛应用的开源Java Servlet容器,它是Apache软件基金会Jakarta项目的一部分。作为HTTP服务器,Tomcat能够处理基于HTTP协议的Web请求,并且是实现Java Servlet和JavaServer Pages(JSP)...

Global site tag (gtag.js) - Google Analytics