在多线程上,如果没有要求你取线程的返回值,或者捕获异常,大家基本上使用的都是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来执行。
对于孩子的鞋子很多的人都会选择最合适的,毕竟孩子小没有太多的安全意识,常常不会保护自己,但是儿童天性好奇,经常会出现摔跤的意外,那么一双好鞋就可以减少这样的问题了。下面友谊长存的小编为大家分享ASAH...
小鸡宝宝考考你,为什么我们买到的腰果一般都是没有壳的?腰果壳有毒、腰果壳容易碎。这是蚂蚁庄园7月15日微信公众号每日一题的问题,大家知道腰果去壳销售的原因是果壳有毒还是易碎吗?下面就让我们一起来看看正...
每天的蚂蚁庄园里,我们可以回答庄园小课堂的问题,答对获得180g饲料,答错获得30g饲料。8月20日每日问题是:为什么我们买到的腰果一般都是没有壳的?如果大家不清楚的答案的话,下面小编就给大家带来详细...
一般而言,男生是视觉的动物(直觉动物), 而女生是感觉的动物, 不过有句老话叫爱美之心人皆有之, 女生男生都喜欢美的事物吧。 那为什么说大多数男生是视觉动物? 01. 短时间来说,男女都是视觉动物...
随着手机的逐渐发展、移动通信技术的不断进步,手机支持网络制式也在不断变化,而手机厂商“双网通”“三网通”“全网通”之类的各种宣传用语、运营商TD、FDD的名词,消费者看得眼花缭乱。今天,我们就来为你介...
. 女人只有自己善待自己,才会成为自己的避风港,才会获得别人的尊重和爱,女人独立自强,才不会在风暴来临的时候抵挡不住,有很多描写女人善待自己的霸气句子,一起来看看激励自己,下面友谊长存小编就带来女人...