run方法是无返回值的,所以在JDK1.5出现了Callable接口 关系类图 Callable Callable接口源码 Callable是一个函数式接口(接口中仅有一个方法),也是一个泛型接口,返回值类型和泛型一致 Future Future接口源码 cancel:取消任务的执行,如果任务已完成或已被取消,则返回false isCancelled:判断任务是否被取消 isDone:判断任务是否...
Future和Callable是密切相关的。你可以通过 ExecutorService 提交一个 Callable 任务,获取一个 Future 对象...
callable和future的关系 callable是有返回值的,通过Future.get获取callable接口返回的执行结果 还可以通过Future.isDone()来判断任务是否已经执行完了,以及取消任务,给任务限时 可以说通过future来操作callable call未执行完毕之前,可以通过Future.get将主线程阻塞,call执行完毕,主线程拿到结果,主线程再切换到runnable状态 所...
简单来说,Executor就是Runnable和Callable的调度容器,Future就是对于具体的调度任务的执行结果进行查看,最为关键的是Future可以检查对应的任务是否已经完成,也可以阻塞在get方法上一直等待任务返回结果。Runnable和Callable的差别就是Runnable是没有结果可以返回的,就算是通过Future也看不到任务调度的结果的。 /** * 通过简...
类图关系 类图的基本关系 大致画了下类图,箭头元素不是很标准的UML类图元素,用在线工具画的,做了些文字说明,见谅见谅。 图中可以很清晰的看到,RunnableFuture继承了Runnable、Future接口,FutureTask实现了RunnableFuture接口,同时构造函数依赖了Callable接口。
2. Callable 、Future 和 FutureTask 2.1 Callable 2.2 FutureTask 2.3 Callable 和 FutureTask 的关系 2.4 Future 3. 具体实例 前言 大家好,我是月夜枫,我又来了!!! Thread、Runnable、Callable、Future、FutureTask,你能详细讲出他们的内部关系么?这也是面试经常问到的问题。
如上,Callable任务依赖FutureTask类执行,而FutureTask类实现了RunnableFuture接口,RunnableFuture接口实则没有提供新的方法,只是简单的继承整合了Runnable,Future两个接口,所以大体类图关系如下: 在FutureTask中,与AQS一样,存在一个用volatile关键字修饰的int变量state,FutureTask通过它对任务的执行状态进行管理。如下: ...
这里我们能看到Thread的构造函数支持Runable的参数,不知道到目前大家有没有捋清楚Thread与Runable的关系,我们再总结一下: 1、 Runable原本平民,只是一个普通的接口。 2、Thread实现了Runable接口,并且实现了接口的run方法。 3、Thread提供了重载的构造函数,接收Runable类型的参数。在Thread重写...
类图关系 Future Callable接口,只是用于单纯地去获得返回值,但是什么时候去获取,或者查看线程运行的状态,就需要借助Future Future的源码如下: publicinterfaceFuture<V>{//取消任务的执行,任务已经完成或者已经被取消时,调用此方***返回falsebooleancancel(booleanmayInterruptIfRunning);//判断任务是否被取消booleanisCancelled...
到这里三者的关系应该捋清楚了。 Runnable没返回值,Callable有返回值,但是Thread不接受Callable,所以有了FutureTask。FutureTask实现Runnable,传入Callable对象。这个时候还需要写一些相关的方法(比如取出返回值的方法),然后这些方法就收录到了Future接口中。 Future的另一个使用场景 ...