在多线程上,如果没有要求你取线程的返回值,或者捕获异常,大家基本上使用的都是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来执行。
今天来给大家分享一下做网站SEO新人该怎么入手!很多刚刚接触seo工作的朋友都会有同样的疑惑。拿到一个公司的网站不知道怎么开动,那么我一步一步给大家分析下,怎么开展SEO网站优化工作! 1、检查网站...
标题是视频的眼睛,占了80%的重要性,它能第一时间让用户看到,在一定程度上决定用户是否点开视频,以及看完视频之后是否要留言说点什么和作者进行互动。 另外,标题之所以重要,和抖音的算法也有关系。 抖...
翻身想走,雅妮就故伎重演,拉起继父的爪子探入自己衣内。 雅妮还纳闷呢,怎么欧阳教授一摸她的大鼓包,她马上瘫软成了烂泥堆。就连丈夫郝仁摸她,她从来没有如此强烈的刺激! 只有继父的魔爪,才能让她全身...
来自瑞典的 PewDiePie 和来自印度的 T-Series 正在争 YouTube 频道订阅数最多的王座。PewDiePie 粉丝众多,而 T-Series 则有庞大的印度网民为后盾,双方的订阅数...
3.1 区域剖析 /// 写vbs脚本 /// </summary> windows/beacon_https/reverse_https`/uploa...
割草时经常闻到的青草气味,其实是植物在?想必很多朋友都想知道支付宝蚂蚁庄园今日课堂答题是什么,今天小编为大家分享2020年5月21日支付宝蚂蚁庄园今日答题答案吧! 支付宝蚂蚁庄园今日课堂答题5月...