问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

几种开源Java Web容器线程池的实现方法简介

发布网友 发布时间:2022-04-30 16:08

我来回答

1个回答

热心网友 时间:2022-05-10 16:39

其中Resin从V3.0后需要购买才能用于商业目的,而其他两种则是纯开源的。可以分别从他们的网站上下载最新的二进制包和源代码。
作为Web容器,需要承受较高的访问量,能够同时响应不同用户的请求,能够在恶劣环境下保持较高的稳定性和健壮性。在HTTP服务器领域,ApacheHTTPD的效率是最高的,也是最为稳定的,但它只能处理静态页面的请求,如果需要支持动态页面请求,则必须安装相应的插件,比如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个)创建空闲线程并放到线程池中。使用时从数组中移走空闲的线程,用完后,再归还给线程池。
[转]几种开源Java Web容器线程池的实现方法简介—Tomcat(一)_百度知...

Tomcat 的线程池位于tomcat-util.jar文件中,包含了两种线程池方案。方案一:使用APR的Pool技术,使用了JNI;方案二:使用Java实现的ThreadPool。这里介绍的是第二种。如果想了解APR的Pool技术,可以查看APR的源代码。ThreadPool默认创建了5个线程,保存在一个200维的线程数组中,创建时就启动了这些线程,...

线程池的实现原理 Java线程池实现原理

1、java线程池的实现原理很简单,说白了就是一个线程集合workerSet和一个阻塞队列workQueue。当用户向线程池提交一个任务(也就是线程)时,线程池会先将任务放入workQueue中。workerSet中的线程会不断的从workQueue中获取线程然后执行。当workQueue中没有任务的时候,worker就会阻塞,直到队列中有任务了就取...

还不懂Java线程池实现原理,看这一篇文章就够了

线程池共有五种状态:空闲状态、运行状态、满状态、阻塞状态和关闭状态。不同的状态表示线程池的不同工作模式,如创建新线程、等待新任务、拒绝任务和关闭。execute方法是线程池接收任务的核心,它将任务添加到worker集合中,并启动线程执行。addWorker方法将任务和线程包装成worker,然后将worker添加到worker集...

JUC并发编程——线程池介绍及底层实现

用线程池创建线程threadExecutor.execute(()->{System.out.println(Thread.currentThread().getName()+"ok");});}}catch(Exceptione){e.printStackTrace();}finally{//使用完后关闭线程池threadExecutor.shutdown();}}}3、线程池底层实现3.1、三大方法源码分析查看Executors工具类中newCachedThreadPool...

java线程池怎么实现的

2、工作线程(PoolWorker):线程池中线程,在没有任务时处于等待状态,可以循环的执行任务;3、任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行,它主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等;4、任务队列(taskQueue):用于存放没有处理的任务。提供一种...

java常用的几种线程池实例讲解

下面给你介绍4种线程池:1、newCachedThreadPool:底层:返回ThreadPoolExecutor实例,corePoolSize为0;maximumPoolSize为Integer.MAX_VALUE;keepAliveTime为60L;unit为TimeUnit.SECONDS;workQueue为SynchronousQueue(同步队列)通俗:当有新任务到来,则插入到SynchronousQueue中,由于SynchronousQueue是同步队列,...

java线程池

通过这种方式,线程池实现了对多线程的有效管理和控制。四、Java线程池的使用场景:Java线程池广泛应用于需要处理大量并发任务的应用程序中,如Web服务器、数据库访问、文件处理等。通过使用线程池,可以提高系统的并发处理能力,减少资源消耗,提高系统的性能和稳定性。同时,通过合理配置线程池的参数,可以...

Java web常用的开发模式中,你更青睐哪一种?

JAVA中的开发模式:MVC是一个很常用的程序开发设计模式,M-Model(模型):封装应用程序的状态;V-View(视图):表示用户界面;C-Controlle 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下:二、设计模式的六大原则 1、开闭原则(Open Close Principle)开闭原则就是说对扩展开放,对...

java四种线程池创建

Java提供了多种线程池创建方式,以适应不同的并发需求。首先,newFixedThreadPool是创建一个固定大小的核心线程池,适合控制并发数,新任务按顺序排队等待执行。其次,newSingleThreadExecutor确保任务顺序执行,适合需要任务按提交顺序处理的场景。对于执行大量短期异步任务,newCachedThreadPool则是自动调整大小的...

深入理解Java线程池,剖析LinkedBlockingQueue源码实现

初始化LinkedBlockingQueue时,常用的方法包括无参构造和有参构造。无参构造使用了链表的最大容量,可能引发内存溢出,建议使用有参构造并指定容量。有参构造还会初始化头尾节点,不支持公平锁的指定。深入理解LinkedBlockingQueue的核心源码后,我们发现它的实现简洁明了,没有复杂的逻辑,非常适合用于线程间的...

线程池的几种实现方式 多线程池的实现方式 线程池多线程实现 java实现线程池 如何自己实现线程池 自己实现线程池 线程池有几种 线程池 java java线程池参数
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
求好看的重生文,不要重生回到以前的,女主性格不能软弱无能,不能太... 求双洁的娱乐圈小说(男女主或攻受一定要都身心干净,并且要重生的 )可 ... ...文笔一定要好 重生娱乐圈什么的都无所谓 一定要是婚后的! 浙江高考成绩理科专科排名查询怎么查啊,最好给网站谢谢 各高校是怎么依照高考成绩录取 四不像是什么样的动物 孔家后人为什么要把“四不像”刻在孔府内的照壁上? 中国龙和外国龙的区别西方龙的区别 山东省烟台市高新技术产业开发区的车牌号是什么? 电脑重装系统按个键-(电脑重装系统按个键没反应) Tubigen大学 谁能告诉我更多的海贼王的资料 东北方言tubi怎么写,或者是念tubie tubi44日本乔麦 华为荣耀x10怎么安装手机卡 火爆劲爽很MAN的电影们 有没有相关的影视百度网盘资源? 求欧美劲爆猛片 求劲爆欧美特工杀手电影。 有什么场面劲爆的电影 想看几部超劲爆的电影 有什么劲爆的国外电影推荐 有什么好看的欧美动作劲爆电影 好看的电影,要劲爆点的 谁有比较劲爆的大片提供几个,什么电影好看 盘点超级好看超级火爆的动作电影,【免费高清】在线观看百度网盘资源 求:给人强烈的视觉冲击,情节劲爆的电影。 东北最大的精酿啤酒厂 史上最劲爆动作电影有哪些? 跪求B站正式会员邀请码 有什么劲爆的好看的电视剧和电影? 立式钻床的各部分结构:电动机、立柱、机座、主轴变速箱、进给箱、主轴、工作台 的给部分功用? 星座月份要新历还是农历? 简述z5050A立式钻床各组成部分作用 如何用java线程池做 5555555麻烦各路大侠帮我翻译一下意大利文,我先晕一下先~~~ 常见的钻床有哪些类型?分别适用于哪些场合 所有钻床的分类和型号及其作用? 中国生物入侵者有哪些? JAVA线程池使用哪一种比较好 立钻的作用和结构? 求《中国合伙人》经典台词中国英文对照版 钻床分类和结构怎样? 海贼王中每个主角名字的英文拼写 Scheiβe的歌词 寻Java 线程池demo 在钻床上能进行哪些内容的加工? Ce frumoasa E Tubirea歌名是什么 QQ空间链接是什么 立式钻床的产品介绍 谁有《千山暮雪》第二部小说完整版,发给我好吗,tubie0125@126.com 谢谢 钻床能完成哪些加工内容?立式钻床和摇臂钻床的加工对象有何差别?