package com.sf.javase.thread; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; // callable的泛型 就是call方法的返回类型 // Callable 和 Runnable的区别 // call()方法相比run()方法,有返回值,还可以抛出异常 // 泛型对应返回类型 泛型和FutureTask也相一致 // FutureTask本质上是Runnable的实现类 所以可以将其作为构造参数传给Thread public class MyCallable implements Callable { @Override public Integer call() throws Exception { System.out.println("call begin"); return 0; } public static void main(String[] args) throws ExecutionException, InterruptedException { MyCallable myCallable = new MyCallable(); // 要把callable作为futureTask的参数 FutureTask futureTask = new FutureTask<>(myCallable); // 创建线程并执行 new Thread(futureTask).start(); Integer result = futureTask.get(); System.out.println(result); } }