概念
Callable类似于Runnable,如果你的某个实例的方法想要被线程执行,也可以通过实现Callable接口的call方法
区别
与使用Runnable接口相比, Callable功能更强大些,相比run()方法,可以有返回值,可以抛出异常,使用方法也有所不同
使用方法
因为Thread中没有支持Callable的构造器方法,而FutureTask本质上也是一个Runnable的接口实现类,且FutureTask持有callable的引用,而且有支持Callable的构造方法,FutureTask中有重写的run方法,run方法中会有通过callable调用call(),计算结果最终会赋值给outcome,通过futureTask.get()可以获取计算结果,但如果此时callable的call方法还没执行完,当前线程会被阻塞,综上所述,我们可以借助FutureTask运行Callable