future是什么意思(解释什么是Future, FutureTask)在多线程上,如果没有要求你取线程的返回值,或者捕获异常,大家基本上使用的都是Thread或者Runnable,当面试时,被问到这个瞬间就是 what? 这是什么东西 。
【解释什么是Future, FutureTask future是什么意思】看过我上篇文章的伙伴应该知道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方法
- isCancelled方法表示任务是否被取消成功,如果在任务正常完成前被取消成功,则返回 true;
- isDone方法表示任务是否已经完成,若任务完成,则返回true;
- cancel方法用来取消任务,如果取消任务成功则返回true,如果取消任务失败则返回false;参数mayInterruptIfRunning表示是否允许取消正在执行却没有执行完毕的任务,如果设置true,则表示可以取消正在执行过程中的任务 。如果任务已经完成,则无论mayInterruptIfRunning为true还是false,此方法肯定返回false,即如果取消已经完成的任务会返回false;如果任务正在执行,若mayInterruptIfRunning设置为true,则返回true,若mayInterruptIfRunning设置为false,则返回false;如果任务还没有执行,则无论mayInterruptIfRunning为true还是false,肯定返回true;
- get()方法用来获取执行结果,这个方法会产生阻塞,会一直等到任务执行完毕才返回;
- get(long timeout, TimeUnit unit)用来获取执行结果,如果在指定时间内,还没获取到结果,就直接返回null 。
- 国内质量好的男士内裤 男士什么品牌内裤
- 年前最挣钱的生意有哪些 年前干点什么好
- 年前最挣钱的生意有哪些 年前干点什么好呢
- 适合年轻人创业项目 年轻人创业叫什么名字
- 农村田地适合种植哪些 农村地里种什么好
- ios16|未受到电商冲击,理发店为啥还是纷纷倒闭?过来人说出真相
- 农村技术员是做什么的(这4个职业在农村很吃香
- 农村能开什么店(盘点月入2万适合在乡镇开的店
- 18种最赚钱的地摊生意 女的做小吃卖做什么好
- 适合小县城的41个投资,在农村镇上做什么批发生意最好
