纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

任务执行器ExecutorService接口

4月12日 夜如影投稿
  任务执行器
  前面我们介绍了最简单的任务执行器接口Executor,它仅仅定义一个方法,即voidexecute(Runnablecommand)。但实际工程中我们可能需要对任务进行某些控制,或者对任务执行器的生命周期进行管理,此时Executor接口就无法满足要求了。于是ExecutorService接口应运而生,它是Executor接口的加强版。
  ExecutorService接口
  ExecutorService接口位于java。util。concurrent包下,该接口继承了Executor接口。为了加强对执行器的控制和对有返回值任务的执行,该接口增加了很多新方法,比如关闭执行器的方法、查看执行器状态的方法、提交Callable任务的方法等等。该接口包含的方法较多,这里只列出一些常用的方法,我们主要还是去理解执行器的设计思路。
  shutdown方法,用于关闭执行器,调用该方法后停止接收新任务,但已经提交给执行器的任务将继续执行完毕。
  isShutdown方法,执行器是否已关闭。
  iSTerminated方法,执行器是否已终止。
  awaitTermination方法,阻塞等待执行器直到其终止。
  submit(Callable)方法,向执行器提交一个具有返回值的任务。
  ExecutorService接口
  自定义任务执行器
  下面我们通过自己实现一个简易的任务执行器来加深对ExecutorService接口的理解,该任务执行器中主要包括任务队列和工作线程,工作线程不断从任务队列取出任务并执行。同时根据ExecutorService接口的定义我们还需要实现执行器的关闭操作及状态查询,此外还需要支持执行具有返回值的任务。
  任务执行器
  我们定义一个MyExecutorService类,该类实现了ExecutorService接口。先看属性,isShutdown和isTerminated分别表示是否关闭和是否已终止。taskQueue是一个列表结构的任务队列,workers是工作线程,这里创建了5个工作线程,count之所以用了AtomicInteger是为了让执行器能在多线程中正确关闭。lock用于实现线程阻塞通知功能,因为awaitTermination方法要阻塞到执行器终止。接着看构造函数,我们会在构造函数中创建工作线程并启动它们,启动后的线程不断从任务队列中取出任务并执行,其中会根据isShutdown标识决定是否要跳出循环,跳出循环则意味着工作线程死亡结束。由于我们希望在关闭任务管理器时能将原来在任务队列中的队列执行完,所以还加了个taskQueue。isEmpty()作为判断条件。
  构造函数与属性
  接着看各个方法的实现,shutdown直接将isShutdown置为true,结合execute方法来看,当isShutdown为true时则任务不会继续被添加到任务队列中了,而且工作线程也会在任务队列为空时死亡。再看awaitTermination方法,它只需直接进入阻塞即可,在任务执行器终止时会通过termination条件唤醒阻塞的线程。submit方法将传入的Callable对象封装成FutureTask对象,然后添加到任务队列中,最后返回Future对象。
  所有方法
  例子一
  根据我们实现的MyE
  {!PGCCOLUMN}
  xecutorService类来编写第一个例子,MyTask对象睡眠一秒钟,以下为输出结果,由于执行器中只有5个工作线程,所以最多只能五个任务并发执行。主线程启动了另外一个线程在睡眠10秒后对执行器进行shutdown操作,主线程调用awaitTermination方法后开始阻塞,直到执行器终止后主线程才能继续往下。
  输出结果
  例子一
  例子二
  第二个例子展示具有可返回值的任务,MyTask需要实现Callable接口,然后在call方法中定义任务。将任务提交给执行器后调用Future的get方法将使主线程进入阻塞状态,直到任务执行完毕返回结果,最终输出receiveresult:taskresult。
  例子二
  本专栏的所有代码都会同步更新到我的github上,需要的朋友可以去下载,这里禁止发地址,那就截个图吧。另外,麻烦各位能给专栏给个好评,在此谢谢各位了。
  跟着作者的70节课彻底搞懂Java并发原理专栏,一步步彻底搞懂Java并发原理。
  作者简介:笔名seaboat,擅长人工智能、计算机科学、数学原理、基础算法。出版书籍:《图解数据结构与算法》、《Tomcat内核设计剖析》、《人工智能原理科普》。
  作者的三个专栏:
  更多Java并发原理内容敬请关注70节课彻底搞懂Java并发原理专栏!
  更多Java并发原理内容敬请关注40节课彻底搞懂数据结构与算法专栏!
  更多Java并发原理内容敬请关注人工智能原理科普专栏!
投诉 评论

洛克王国6月5日更新活动攻略又到了每周洛克王国活动更新的时间了,喜欢的小伙伴记得三连支持一下哈。一、洛克游玩指南跟随洛克一起游玩王国,完成各类推荐活动打卡,即可获取对应洛克印章,使用洛克印章可……iOS14:如何阻止iPhoneApps追踪你的个人信息?欢迎来到Vic的数字化空间这里会定期推送最新最热的科技,互联网,数字营销等相关资讯噢!iOS14加入了许多新的安全及隐私功能,其中一个就是若一款App希望通过……肯德基下载超级APP领“超级新人礼”,尽享3张免肯德基下载超级APP领超级新人礼尽享3张免费券肯德基五一桶劲省51元鹿晗你玩转五一!会员凭券专享,4月29日5月5日,缤纷小食美好如约,买一送一。下载超级AP……美国站的卖家请注意!您公司名称与地址将显示全文共612字,大约需要2分钟为了让卖家的信息基准保持一致,从而帮助买家做出明智的购物决策,从2020年9月1日起,亚马逊将在美国站()的“卖家资料”页面显示卖家的公司名……张宝林为什么拿了丁旭钱,还要杀丁旭?导读:在一部《征服》影视剧中刘华强第一集就枪杀了吴天,而我们仔细回顾整个剧情,除了吴天游戏厅被刘华强砸再之后就是吴天给刘华强“赔礼”中间人周国权做“和事佬”,其余没任何仇恨瓜葛……了解CAD的4种主要图形文件格式,重新认识DWG、原创:就说我在开发区常用图形文件格式盘点CAD中的图形文件格式共9种,其扩展名分别为:DWG图形或块文件DWT图形样板文件DWS图形标准文件……电梯塌陷,女子瞬间被吞没!这两天一段小视频在网上热传:地铁自动扶梯踏板突然塌陷,一名女子被瞬间吞没监控还原惊险一幕据南方都市报报道,事件发生于深圳地铁3号线翠竹站C出口。视频显示……中国棉花市场周报(2020年7月610日)国内外棉价上涨棉纱价格分化中国棉花市场周报(2020年7月610日)本周,国内棉价振荡上行;国际棉价继续回升;国际棉纱价格报价上调,国内棉纱价格持续低迷;涤纶短纤继……39岁大姐公开减肥历程:只需一个方法,减掉二十每天都有人在减肥,但却不是每天都有人减肥成功。主要原因就是随着近些年生活水平的提高,我们的饮食发生了很大的改变,尤其是中式早餐更是种类繁多,许多高热量高蛋白食物纷纷成了日常饮食……智能电视无法识别U盘里的APK文件?简单几招教你虽然大部分品牌的智能电视出厂时都内置了应用商店,大家可以在其中下载软件,但是自带的应用商店毕竟种类有限,满足不了大家的需求。现如今,在自己的智能电视上下载第三方软件再正常和普通……想要注销QQ,就要满足这些条件,你确定要注销吗多少人的回忆都在QQ上,以前只有按键手机,自带手机QQ,每个月5块钱30兆流量,都用不掉。如今,这个让我们的回忆带着酸甜与苦涩的QQ,即将迎来注销,这一次,真的要说再见了。……任务执行器ExecutorService接口任务执行器前面我们介绍了最简单的任务执行器接口Executor,它仅仅定义一个方法,即voidexecute(Runnablecommand)。但实际工程中我们可能需要对……
淘宝客服催单付款技巧提高直通车权重的一些小方法淘宝店铺免费测款方式盘点爆款打造核心要素分析淘宝客服工作的基本流程淘宝客服售前话术案例有了这些撩妹技能,开好直通车不是事淘宝客服如何应对不同要求的客户?千人千面智能模块如何提升店铺成交直通车怎么开才能带动店铺搜索流量?微商做好产品规划,日粉丝暴增5000人!无线直通车流量来源分析一图看完,小米米粉节优惠活动及新品一览表!单眼皮这样化妆,比双眼皮好看10倍想要参加淘金币好店币选?这里有份总结给你市司法行政系统纪检监察队伍建设的调研报告精选多篇等待唯一(4)黄济华:呼唤新诗艺术形式的规范鞭策造句用鞭策造句大全第一次分床睡一堆造句用一堆造句大全iPhone14Pro曝光苹果将换用USBC接口6岁开始学做饭,他能让一个串串店年入百万吗?什么是路基边坡线

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形