- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
34-WorkerThread模式:如何避免重复创建线程?
在上一篇文章中,我们介绍了一种最简单的分工模式——Thread-Per-Message模式,对应到现实世界,其
实就是委托。这种分工模式如果用JavaThread实现,频繁地创建、销毁线程非常影响性能,同时无限
制地创建线程还可能导致OOM,所以在Java领域使用场景就受限了。
要想有效避免线程的频繁创建、销毁以及OOM问题,就不提今天我们要细聊的,也是Java领域使用最
多的WorkerThread模式。
WorkerThread模式及其实现
WorkerThread模式可以类比现实世界里车间的工作模式:车间里的工人,有活儿了,大家一起干,没活儿
了就聊等着。你可以参考下面的示意图来理解,WorkerThread模式中WorkerThread对应到现实世界里,
其实指的就是车间里的工人。不过这里需要注意的是,车间里的工人数量往往是确定的。
车间工作示意图
那在编程领域该如何模拟车间的这种工作模式呢?或者说如何去实现WorkerThread模式呢?通过上面的
图,你很容易就能想到用阻塞队列做任务池,然后创建固定数量的线程消费阻塞队列中的任务。其实你仔细
想会发现,这个方案就是Java语言的线程池。
线程池有很多优点,例如能够避免重复创建、销毁线程,同时能够限制创建线程的上限等等。学习完上一篇
文章后你已经知道,用Java的Thread实现Thread-Per-Message模式难以应对高并发场景,就在于频繁
创建、销毁Java线程的成本有点高,而且地创建线程还可能导致应用OOM。线程池,则恰好能解决这
些问题。
那我们还是以echo程序为例,看看如何用线程池来实现。
下面的示例代码是用线程池实现的echo服务端,相比于Thread-Per-Message模式的实现,改动非常少,仅仅
是创建了一个最多线程数为500的线程池es,然后通过es.execute()方法将请求处理的任务提交给线程池处
理。
ExecutorServicees=Executors
rkrThredmode:avoidthreadcreation34-WorkerThreadmode:
howtoavoidrepeatedlycreatingthreads?
Inthepreviousarticle,weintroducedoneofthesimptdivisionoflabormodel-Thread-Per-Messagemodel,
whichcorrespondstotherealworldandisactuallyentrusted.Ifthisdivisionoflabormodelisimplemented
withJavaThread,frequentcreationanddestructionofthreadswillgreatlyaffectperformance.Atthesameti
me,unlimitedthreadcreationmayalsocauseOOM,sotheusagescenariosintheJavafieldarelimited.
Ifyouwanttoeffectivelyavoidthefrequentcreation,destructionandOOMproblemsofthreads,youhavetomention
whatwearegoingtotalkaboutindetailtoday,whichisalsothemostusedWorkerThreadmodeintheJavafield.
kerhrdWorkerThreadpatternand
itsimplementation
TheWorkerThreadmodelcanbecomparedtotheworkingmodelofaworkshopintherea
原创力文档


文档评论(0)