即实现runnable接口又能传入Callable的构造方法
为什么要找这样一个方法
因为想new Thread()时传入runnable类型的接口并且想实现callable接口
Callable接口类似于Runnable ,因为它们都是为其实例可能由另一个线程执行的类设计的。 然而,A Runnable不返回结果,也不能抛出被检查的异常。
FutureTask 的构造方法
FutureTask
可取消的异步计算。 该类提供了一个Future的基本实现 ,具有启动和取消计算的方法,查询计算是否完整,并检索计算结果。 结果只能在计算完成后才能检索; 如果计算尚未完成,则get方法将阻止。 一旦计算完成,则无法重新启动或取消计算(除非使用runAndReset()调用计算 )。
A FutureTask可用于包装Callable或Runnable对象。 因为FutureTask实现Runnable ,一个FutureTask可以提交到一个Executor执行。
除了作为独立类之外,此类还提供了protected功能,在创建自定义任务类时可能很有用。
FutureTask小Demo
package juc;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
//runnable接口无返回值
class myThread2 implements Runnable{
@Override
public void run() {
System.out.println("run");
}
}
//callable接口有返回值
class myThread implements Callable<Integer> {
@Override
public Integer call() throws Exception {
System.out.println("callable接口");
return 1000;
}
}
public class CallableDemo {
public static void main(String[] args) throws Exception {
FutureTask<Integer> futureTask = new FutureTask(new myThread());
new Thread(futureTask,"AA").start();
System.out.println(futureTask.get());
}
}
get这个方法永远在最后