在多线程上,如果没有要求你取线程的返回值,或者捕获异常,大家基本上使用的都是Thread或者Runnable,当面试时,被问到这个瞬间就是 what? 这是什么东西。
看过我上篇文章的伙伴应该知道Future,FutureTask《初级面试:如何向线程池提交任务,提交任务有几种方式有什么区别》没看过的莫慌。这篇文章我来告诉你他们是什么,有什么用。
大家都知道线程池有2中方式提交任务,分别是实现Runnable的类和Callable的类,从Runnable中的run *** 中,也可以知道他没有返回值也没有抛出异常,这也就决定了它是实现不了具有返回值和抛异常的线程。如果我们需要获取返回值,就得想各种其他的办法来解决。自jdk1.5开始,提供了Callable,他们为我们提供了线程返回值和异常的功能。如图:
Callable
call *** 抛出异常以及有返回值。(所以他与Runnable相比,优点就出来了),对比下如何实现线程。
Runnable实现
Callable实现
Runnable就不用说了,Callable必须要借助FutureTask封装才能启动线程,看过我上篇文章的伙伴肯定会说,我在线程池中并没有使用到FutureTask,而是直通过submit提交上去的。是因为submit里面也是使用了FutureTask,只是他帮我们写好了。如图:
submit
眼尖的人肯定看到了execute这个 *** ,我之前说过这个 *** 只有实现了Runnable的类才能使用,也就证明了FutureTask也是肯定实现了Runnable的。如图:
FutureTask
那么他除了包装Callable他还能干什么呢?
FutureTask ***
最后从上面的源码中可以看见他实现了Future,而上面这些 *** 恰恰就是Future定义的。Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果。也就是说Future提供了三种功能:1)判断任务是否完成;2)能够中断任务;3)能够获取任务执行结果。而FutureTask是Future的实现,FutureTask对象可以对实现了Callable和Runnable的对象进行包装,由于FutureTask也是实现了Runnable接口所以它可以提交给Executor来执行。
夏天天气炎热,所以很多人的食欲都会变差,吃不下饭,而不仅仅是这样,有些宠物也是这样,有一些狗狗在天气热的时候食量甚至减少了一半,这样主人也感觉到很异常,毕竟对于主人来说食欲旺盛代表着他身体是非常健康的...
本文目录一览: 1、怎么在手机上管理自家的WiFi 2、wifi密码查看器安卓版怎么使用 3、怎样下载wifi连接管理器 4、怎样用手机wifi连接管理器查看wifi密码 5、如何用手...
QQ在我们日常生活当中是拥有非常广泛的一款APP,而且在我们生活当中它占据的功效也是非常之多的,而且相比于weixin的收手续费来说qq似乎更加方便。那如何能够修改QQ密码呢? 相较于在登陆之后直...
移动电源的安全隐患一直是大伙儿关心的,市场管理质监总局调研75批号商品,近4成移动电源抽样检验不过关,应用不过关的移动电源轻则毁坏手机上,重则造成发生爆炸,严重危害生命健康,不过关的移动电源有什么伤害...
DNF已经开启了万水千山粽是情活动,所以小编就跟大家介绍一下这个活动的玩法以及奖励吧,下面一起来看下详细内容。 活动时间:20.06.05(维护后)~20.06.18(维护前) 活动内容: 在推...
本文导读目录: 1、谁能把纯情罗曼史的简介发给我啊? 2、什么是罗曼史? 3、纯情罗曼史第二季内容简介 4、法国电影 罗曼史 剧情简介 5、纯情罗曼史的内容具体讲的是什么 6、什么...