| import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;/* * 一、创建执行线程的方式三:实现 Callable 接口。 相较于实现 Runnable 接口的方式,方法可以有返回值,并且可以抛出异常。 * * 二、执行 Callable 方式,需要 FutureTask 实现类的支持,用于接收运算结果。  FutureTask 是  Future 接口的实现类 */publicclassTestCallable {    publicstaticvoidmain(String[] args) {        ThreadDemo td = newThreadDemo();        //1.执行 Callable 方式,需要 FutureTask 实现类的支持,用于接收运算结果。        FutureTask<Integer> result = newFutureTask<>(td);        newThread(result).start();        //2.接收线程运算后的结果        try{            Integer sum = result.get();  //FutureTask 可用于 闭锁 类似于CountDownLatch的作用,在所有的线程没有执行完成之后这里是不会执行的            System.out.println(sum);            System.out.println("------------------------------------");        } catch(InterruptedException | ExecutionException e) {            e.printStackTrace();        }    }}classThreadDemo implements Callable<Integer> {    @Override    publicInteger call() throws Exception {        intsum = 0;        for(inti = 0; i <= 100000; i++) {            sum += i;        }        returnsum;    }} | 
综上例子可以看到: Callable 和 Future接口的区别
from: https://www.cnblogs.com/baizhanshi/p/6425209.html
原文:https://www.cnblogs.com/GarfieldEr007/p/10166027.html