每天一个知识点(十三) 说一下runnable 和 callable 有什么区别?Future是什么?

简介: 执行cancel(true)方法将以中断执行此任务线程的方式来试图停止任务,如果停止成功,返回true;当任务已经启动,执行cancel(false)方法将不会对正在执行的任务线程产生影响(让线程正常执行到完成),此时返回false;当任务已经完成,执行cancel(...)方法将返回false

微信搜索《Java鱼仔》,每天一个知识点不错过


所有内容以及历史知识点均会更新到github上,欢迎star


(一)每天一个知识点


说一下runnable 和 callable 有什么区别?FutureTask是什么?


(二)回答


2.1 runnable和callable的区别


runnable和callable都可以用来编写多线程程序,两者的区别在于:


1.实现了runnable接口后无法返回结果信息,实现了callable接口后有返回值。


2.实现了runnable接口异常无法通过throws抛出异常,实现了callable接口后可以直接抛出Exception异常


2.2 Future是什么?


在使用callable接口实现多线程时,我们会用到FutureTask去获取返回值,那么Future和FutureTask是什么?


Future是一个获取异步计算结果的接口,而FutureTask是Future的一个实现类。


publicinterfaceFuture<V> {
booleancancel(booleanmayInterruptIfRunning);
booleanisCancelled();
booleanisDone();
Vget() throwsInterruptedException, ExecutionException;
Vget(longtimeout, TimeUnitunit)
throwsInterruptedException, ExecutionException, TimeoutException;
}

future接口的源码很简单,它实现了五个方法


boolean cancel(boolean mayInterruptRunning) :如果任务还没开始,执行cancel(...)方法将返回false;如果任务已经启动,执行cancel(true)方法将以中断执行此任务线程的方式来试图停止任务,如果停止成功,返回true;当任务已经启动,执行cancel(false)方法将不会对正在执行的任务线程产生影响(让线程正常执行到完成),此时返回false;当任务已经完成,执行cancel(...)方法将返回false。mayInterruptRunning参数表示是否中断执行中的线程。


boolean isCanceller() :如果任务完成前被取消,则返回true。


boolean isDone() :如果任务执行结束,无论是正常结束或是中途取消还是发生异常,都返回true。


V get() :获取异步执行的结果,如果没有结果可用,此方法会阻塞直到异步计算完成。


V get(Long timeout , TimeUnit unit) :获取异步执行结果,如果没有结果可用,此方法会阻塞,但是会有时间限制,如果阻塞时间超过设定的timeout时间,该方法将抛出异常。


总结起来Future实现以下几个功能:可以中断正在执行的任务、可以判断任务是否还在执行、可以获取到任务执行后的结果。FutureTask是Future接口一个比较常用的实现类



相关文章
|
4月前
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
18 0
面试官:除了继承Thread类和实现Runnable接口,你知道使用Callable接口的方式来创建线程吗?
|
1月前
|
Java
Java并发编程:理解并使用Future和Callable接口
【2月更文挑战第25天】 在Java中,多线程编程是一个重要的概念,它允许我们同时执行多个任务。然而,有时候我们需要等待一个或多个线程完成,然后才能继续执行其他任务。这就需要使用到Future和Callable接口。本文将深入探讨这两个接口的用法,以及它们如何帮助我们更好地管理多线程。
|
1月前
|
Java
创建线程的三种方式:继承Thread、Runnable 接口、Callable 接口
创建线程的三种方式:继承Thread、Runnable 接口、Callable 接口
runnable 和 callable 有什么区别
runnable 和 callable 有什么区别
|
5月前
|
Java
ExecutorService、Callable、Future实现有返回结果的多线程原理解析
ExecutorService、Callable、Future实现有返回结果的多线程原理解析
30 0
|
5月前
|
存储 Java
并发编程系列教程(09) - Callable与Future模式
并发编程系列教程(09) - Callable与Future模式
25 0
|
8月前
|
缓存 Java 数据库连接
线程的创建、Lambda函数式接口?Runnable和Callable之间的适配?动态修改线程任务?这里带你图解Java线程池
上面只是提到了对于Thread执行任务的一种动态实现方法,肯定还有其他的。 那么动态实现有什么好处呢? 当我们有很多个任务的时候,我们如果一直使用new,再让gc的话,那么对于系统资源的消耗无疑是巨大的。 那么这个时候,如果我们固定一下,专门拿几个线程来处理并发任务呢?但是当并发任务很多又该怎么办? 这个时候就引入了池化思想 —— Pool 什么是池? 在学JDBC的时候我们知道了连接池,在学Spring的时候,我们又接触到了对象池。 其实按理来说线程池应该是大家在初学JavaSE的时候应该就遇到的,这里我们再来讲一下。 线程池,就是用一个容器来管理线程,这个容器叫做池(Poo
86 0
线程的创建、Lambda函数式接口?Runnable和Callable之间的适配?动态修改线程任务?这里带你图解Java线程池
|
8月前
|
Java 调度
Java多线程(Thread,Runnable,Callable)附带相关面试题
1.通过继承Thread类实现多线程,2.多线程常用操作方法,3.通过Runnable接口实现多线程,4.通过Lambda与Thread结合实现快速创建多线程,5.通过实现Callable接口得到线程返回值
105 0
|
8月前
|
Java
【并发技术11】Callable与Future的应用
【并发技术11】Callable与Future的应用
|
9月前
|
Java
runnable 和 callable 有什么区别
Runnable和Callable都是用于实现多线程的接口,区别在于返回结果、异常处理、阻塞和结果处理等方面。选择使用Runnable还是Callable取决于任务的需求和场景。
144 0