- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ExecutorService(任务调度器)详解
2021-05-31
前言:这篇文章值得细读,确定会有收获的。
一.ExecutorService:
它也是一个接口,它扩展自Executor接口,Executor接口更像一个笼统的命令模式,仅有一个方法:execute(runnable);Executor接口简约,但是很重要,重要在这种设计的模式上。。
?
ExecutorService在Executor的基础上添加了“service”特性的方法:
shutdown()、shutdownNow():都是关闭当前service服务,释放Executor的全部资源(参见实现类);它所触发的动作就是取消队列中任务的执行。shutdown是一种“友好”的关闭,它将不再(现实上是不能)接受新的任务提交,同时把已经提交到队列中的任务执行完毕。shutdownNow愈加直接一些,它将会把尚未执行的任务不再执行,正在执行的任务,通过“线程中缀”(errupt),假如线程无法响应“中缀”,那么将不会通过此方式被马上结束。shutdowNow是个有前往类型的方法,它前往那些等待执行的任务列表(List)
isShutdown:程序能否已经关闭,1)方法将导致其前往true。
isTerminated:能否已经结束,假如关闭后,全部的任务都执行完成,将前往true,否则其他情况均前往false。
awaitTermination(timeout):会抛出interruptException,此方法就是个废柴,或许意思是等待一段之间直到“任务全部结束”,假如超时就前往false。
Future submit(callable/runnale):向Executor提交任务,并前往一个结果未定的Future。
List invokeAll(Collection):一个废柴方法,同步的方法,执行全部的任务列表,当全部任务都执行完成后,前往Future列表。这方法有啥用??貌似,可以对一批任务进行批量跟踪。此方法会抛出interruptException。
T invokeAny(Collection): 任务集合中,任何一个任务完成就前往。
这些方法都会被ExecutorService的子类实现,其实Executor的子类的实现原理,才是最有意义的。其实基于Executor接口本人也能制造世界。
?
二.ScheduledExecutorService:
ExecutorService接口有一个格外重要的子接口:?ScheduledExecutorService,从它的名字,我们就能看出此service是为了支持时间可控的任务执行而设计,其中包括:固定延迟执行,周期性执行;不过他还不支持制定特定date执行,这个工作可以交给Timer来做(稍后参看timer讲解)
ScheduledExecutorService供应了如下3个核心方法:
schedule(Callable callable, long delay, TimeUnit unit)
schedule(Runnable command, long delay, TimeUnit unit)
scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit):不再赘述每个方法的意义.
ScheduledExecutorService的独一子类(基于线程池)ScheduledThreadPoolExecutor(稍后参看其内部原理)
上述4个方法均会前往一个ScheduleFuture,这接口并没有什么特殊的地方,和Future接口相比仅仅多扩展了一个Delay接口(此接口仅作标记特性),像Future接口一样,这个接口也有着操蛋的承继:
ScheduledFuture + RunnableFuture ?-- RunnableScheduledFuture(接口) -- ScheduledFutureTask(一个内部类同时承继了FutureTask)
Future + Runnable --RunnableFuture -- FutureTask(子类)
?
这么惊异的接口复合,以及最终的ScheduledFutureTask类和FutureTask类,只是为了一个目的,归一化Callable和runnable这2种可执行任务,并可以猎取(探测)任务执行的结果,并可以cancel任务,以及在任务执行完成后做
文档评论(0)