1.Future解决了什么问题
Future是java中的一个接口,主要用于java多线程计算过程的异步结果获取,能够感知计算的进度,与传统的多线程实现方式,比如继承Thread类,实现runnable接口,它们主要的局限在于对多线程运行的本身缺少监督。
2.Callable接口和Runnable接口区别
下面是它们之间的主要区别:
- runable接口是用run方法作为线程运行任务的入口,callable接口使用call方法
- 运行Callable任务可拿到一个Future对象, Future表示异步计算的结果
- callable的实现类FutureTask提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。
FutureTask类:包装callable接口,并同时实现了Runable接口和Future接口,实现Runnable接口是为了满足多线程并发执行的目的,实现Future接口则是为了满足多线程并发过程中新线程不可控问题。
FutureTask的构造方法:
public FutureTask(Callable<V> callable) {
if (callable == null)
throw new NullPointerException();
this.callable = callable;
this.state = NEW; // ensure visibility of callable
}
NEW代表异步计算还没开始,
COMPLETING 代表计算正在进行中
NORMAL 代表计算正常结束
EXCEPTIONAL 代表计算过程中出现了异常
CANCELLED 代表计算任务被取消
INTERRUPTING 代表计算任务正在被中断执行
INTERRUPTED 代表计算任务已经被中断执行