`
lijackly
  • 浏览: 70287 次
  • 性别: 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的国产开源web服务器

    JerryMouse 模仿tomcat的国产开源web服务器,希望可以将交互做的更好,

    Java实现 MeyboMail Web 开源简化版

    MeyboMail Web(Java)开源简化版 MeyboMail Web(Java)开源简化版 MeyboMail Web(Java)开源简化版 MeyboMail Web(Java)开源简化版 MeyboMail Web(Java)开源简化版 MeyboMail Web(Java)开源简化版 MeyboMail Web(Java)...

    轻量级的 Java Web 容器 Jetty.zip

    Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立...

    Tomcat安装及配置教程.pdf

    omcat是一个开源的Java Servlet容器,可以作为Java Web应用程序的运行环境。它提供了一个强大的、可扩展的平台,用于部署和执行Java Web应用程序。本教程将指导您完成Tomcat的安装和配置过程。omcat是一个开源的Java...

    免费开源的 Java Web 应用服务器 -- Apache Tomcat

    Apache Tomcat 版本号: 8.5 ,10.0(新增) 配置方法及常见问题处理: 1、启动内存参数的配置 2、修改Tomcat的JDK目录 3、如何增加虚拟目录 4、GET方式URL乱码问题解决 5、虚拟主机配置文件 6、新增版本中javax....

    高效,小巧的开源JAVA WEB 开发框架-Nutz (源码,开发文档)

    为最大限度的提高 Web 程序员的生产力,Nutz 必须具备如下特性: 提供 SSH 大部分功能 数据库访问层 -- Nutz.Dao 反转注入支持 -- Nutz.Ioc Mvc 框架 -- Nutz.Mvc Json 解析器 -- Nutz.Json 更多的简化Java语法的...

    java开源包6

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java web实现数据库连接

    《Java Web从入门到精通》开始主要介绍Servlet、JSP、JavaBean、EL、JSTL、JDBC等Web开发基础知识,然后学习Struts、Hibernate、Spring、Ajax、JSF等开源框架,并最终学习如何整合这些开源框架进行J2EE开发,如何...

    java开源包9

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    apache优秀Java开源项目源代码—— apache-roller!

    阅读优秀项目源代码是提高Java开发水平,弥补项目经验不足的最佳途径! 现奉上丰盛的Java源代码大餐——apache优秀Java开源博客项目源代码 apache-roller!

    java开源包10

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    JAVA上百实例源码以及开源项目

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

    java开源包8

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    一款基于 JAVA WEB 的开源问卷表单系统

    是一款方便、高效、实用的调研问卷系统,一款基于 JAVA WEB 的开源问卷表单系统,附有数据库表结构及数据,mysql数据库,只要有tomcat,myeclipse,jdk,mysql,就能开发使用,拖拽形式的编辑试卷方便实用,不仅支持...

    Java 开发区块链的开源项目 —— 中文名:激凸链

    用 Java 开发独立的区块链项目,一个项目搞定! 模块说明: core —— 区块链核心模块 demo —— 基于 Web 的区块链应用演示项目

    Java 程序员必须掌握的 10 款开源工具!(csdn)————程序.pdf

    Java 程序员必须掌握的 10 款开源工具!(csdn)————程序

    java 全端开源 电商系统 springboot uniapp 小程序 前后端分离 高可用(csdn)————程序..pdf

    java 全端开源 电商系统 springboot uniapp 小程序 前后端分离 高可用(csdn)————程序.

    tomcat部署web项目之java开源订销管理系统-javainfo

    tomcat部署web项目之java开源订销管理系统_javainfo

    Apache Tomcat 7.0.90 发布,开源 Web 应用服务器

    Apache Tomcat 7.0.90 发布了,Apache Tomcat 是 Java Servlet、JavaServer Pages、Java 表达式语言和 Java WebSocket 技术的开源实现,是一个免费的开放源代码的 Web 应用服务器。 更新内容如下: Add the ...

Global site tag (gtag.js) - Google Analytics