Runnable、Callable、Future、FutureTask

来源:互联网 发布:人工智能这本书 编辑:程序博客网 时间:2024/04/28 08:02

Runnable

实现无参的run()方法,不带返回值

Callable

实现无参的call()方法,可带返回值
一般使用配合ExecutorService的submit使用

<T> Future<T> submit(Callable<T> task);<T> Future<T> submit(Runnable task, T result);Future<?> submit(Runnable task);

Future

Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果。必要时可以通过get方法获取执行结果,该方法会阻塞直到任务返回结果。
也就是说Future提供了三种功能:

  1)判断任务是否完成  2)能够中断任务  3)能够获取任务执行结果

因为Future只是一个接口,所以是无法直接用来创建对象使用的,因此就有了下面的FutureTask。
 

FutureTask

FutureTask是Future接口的一个唯一实现类

public class FutureTask<V> implements RunnableFuture<V> {...}public interface RunnableFuture<V> extends Runnable, Future<V> {...}

可以看出RunnableFuture继承了Runnable接口和Future接口,而FutureTask实现了RunnableFuture接口。所以它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值

0 0
原创粉丝点击