Runnable Callable Future FutureTask

这篇文章不错Mark一下

http://www.cnblogs.com/dolphin0520/p/3949310.html

### Runnable

众所周知,实现线程的两种方式 1、extends Thread 2、implements Runnable

该接口只有一个方法就是

```java

public interface Runnable {

public abstract void run();

}

```

### Callable

因为runnable 是没有返回值的,所以有些场景会不是很方便,Callable解决了这个问题

该接口也只有一个方法,但它的run方法有了返回值

``` java

public interface Callable{

T run() throws Exeception;

}

```

### Future

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

### FutureTask

FutureTask 是一个类,前三者是接口,FutureTask 是Future的唯一实现类

``` java

public class FutureTask implements RunnableFuture

```

再看RunnableFuture这个接口

``` java

public interface RunnableFuture implements Runnable , Future{

void run();

}

```

`总结:runnable callable 都是线程类的接口,只是前者没有返回值,后者有返回值,还会抛出异常

future 类似于线程的辅助类,可以,查看返回值、取消线程,查看线程状态等,callable返回值的体现也是和future配合使用。

future 和 future 的区别,

executorService submit callable的时候  需要通过返回值future来得到返回值

executorService submit futureTask 不需要通过future来获取返回值,直接submit后,通过futureTask.get方法来获取返回值

`

你可能感兴趣的:(Runnable Callable Future FutureTask)