1. 1、本文档共29页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
java线程池

基于生产-消费者模式的任务异步线程池设计与实现 有些童鞋可能会说,在JDK1.5后就带了ExecutorService这样的线程池,干嘛还自己实现啊?这里,我就先简单说一下背景情况和设计的思路先。 ?1. JDK的ExecutorService中的线程池只是提供了一些基础的实现,进入线程池的任务一般有两种行为:阻塞或者激活新的线程,前者是对于fixedThreadPool而言,而后者是对于cachedTreadPool。而项目需要的是一个具有伸缩性的。这里包括两个方面,一个是伸缩性的工作线程池(可以根据情况对线程池进行自我调节),二是伸缩性的任务队列(具有固定的大小,多余的任务会被暂时转储,而队列空闲至一个阈值时,从恢复转储的任务)。Commons-pool其实实现了第一个需求,但是它在设计上是存在一些问题,并不太适合用于线程池的管理(改篇可以再行讨论)。 2. 对于任务队列好,对于工作线程好,一个具有良好设计组件的前提是还有这么几个需求的:它自身是可以被Audit,也就是它的性能,实际工作质量是可以被检查和评估的;它的行为是可以被扩展的;它必须是健壮的并且可控的。所以,除了生产-消费者的线程池外,还必须有一些管理线程,它们必须能够良好地反馈和控制线程池;其次对于整个组件的活动必须定义一套事件以及事件监听机制,其目标一是能做到组件状态的自省,二是能提供客户端的扩展(比如实现动态任务链等)。 ? ?? ?好了,谈了背景,先简单减少一下组件中几个主要角色的构成吧(因为整个组件约有60个类,所以不可能全部说明和贴出来): 1. WorkEngine: 除了继承Switchable这一一个控制开关外,它包括三个主要组成部分和三个扩展部分。 ?? ?三个组成部分也就是组件的核心:任务队列、工作线程代理、任务结果处理队列。 ?? ?三个扩展部分分别是:配置、持久化接口以及控制钩子接口。 ? Java代码? public?interface?Switchable?{?? ?? ????void?cancelWork()?;?? ?? ????String?getId()?;?? ?? ????boolean?isStartForWork()?;?? ?? ????void?startWork()?;?? ?? ????void?stopWork()?;?? }?? ?? public?interface?WorkEngine?extends?Switchable?{?? ?? ????void?addControlHook(Switchable?hook)?;?? ?? ????WorkConfiguration?getConfiguration()?;?? ?? ????Persistence?getPersistence()?;?? ?? ????TaskReportQueue?getReportQueue()?;?? ?? ????TaskQueue?getTaskQueue()?;?? ?? ????WorkerBroker?getWorkerBroker()?;?? ?? }?? ? ?2. 下面对三个主要的部件接口简单说明下: ?? ?首先是任务队列TaskQueue,相对于传统的队列,增加了事件监听器和任务优先级重处理。 ? Java代码? public?interface?TaskQueue?extends?IterableTask?{?? ?? ????void?addEventListener(TaskEventListener?listener)?;?? ?? ????/**? ?????*?add?a?new?task?to?tail?of?queue? ?????*?@param?task? ?????*/?? ????void?addTask(Task?task)?;?? ?? ????/**? ?????*?check?whether?existing?task?in?queue.? ?????*?@return? ?????*/?? ????boolean?existTask()?;?? ?? ????/**? ?????*?sort?tasks?in?queue?according?to?priority? ?????*/?? ????void?sequence()?;?? ?? ????/**? ?????*?remove?the?task?at?the?head?of?queue? ?????*/?? ????Task?removeTask()?;?? ?? ????/**? ?????*?remove?the?indicated?task?in?queue? ?????*?@param?task? ?

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档