在多线程上,如果没有要求你取线程的返回值,或者捕获异常,大家基本上使用的都是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来执行。
CP一次主要出现在动漫里,或者说主要用在二次元,或者近年来的少了三次元里,喜欢看动漫的朋友应该对这个词不会太陌生,尤其是喜欢看同人类动漫或者小说的。另外还要介绍的就是CP粉丝是什么,CP粉丝也流行...
高速公路匝道又叫引道,是高速公路出口或入口靠右侧的一条道路(一般在150-200米),因为高速公路连接的平顺性影响着车辆的安全行驶,所以高速上建设的匝道就具有非常重要的作用。 我们很多时候都...
在结婚现场,新郎把那枚钻戒戴在新娘的左手无名指上,并许下自己爱的诺言,是一个非常浪漫而神圣的时刻。把结婚戒指戴在左手中指上,也是一种广受认可的行为。那么,结婚戒指戴中指可以吗,结婚戒指有哪些戴法呢?...
力不从心 【原文】 超之始出,志捐躯命,冀立微功,以自陈效。会陈睦之变,道路隔绝,超以一身转侧绝域,晓譬诸国,因其兵众,每有攻战,辄为先登,身被金夷,不避死亡。赖蒙陛下神灵,且得延命沙漠,至今积三...
今天腊月二十七,我在市场上买年货,听到人们说了一个故事,觉得挺有意思,特说给大家听,使过年的你有所启迪。 皇上做了一个梦:山倒了,水干了,花谢了! 皇后说:不好,山倒了江山不保,水干了民心散了...
本文笔者将从用户体验五层要素出发,讲述内容运营如何在日常工作中,通过优化内容策略来提高用户体验。本文适用于对用户体验设计和内容运营的交叉领域感兴趣的内容运营从业者。 《用户体验要素》于2002年...