为何使用Callable?
Callable优势是相对于Runnable而言的,使用Runnable作为线程的执行器是不会返回结果的,而Callable作为执行器可以返回结果(也可以抛出异常),同时还可以对任务做一些操作和获取任务的当前状态。
Callable是如何实现这些功能的?
Callable实现上述的功能是通过Future这个接口的,注意ExecutorService包含三个方法
1. <T> Future<T>submit(Callable<T> task);
2. <T> Future<T> submit(Runnable task, T result);
3. Future<?> submit(Runnable task);
这3个方法中第一个和第三个比较常用,而由于Runnable的run()方法时没有返回值的,这就注定了返回的Future对象不可能拿到返回值。