Callable 对象实际上属于 Executor 框架的功能类,callable 接口和 runable 接口类似,但是提供了比 runnable 更加强大的功能,主要表现为一下 3 点:
1 callable 可以在任务结束的时候提供一个返回值,runnable 无法提供这个功能。
2 callable 中的 call()方法可以抛出异常,而 runnable 不能。
3 运行 callable 可以拿到一个 future 对象,而 future 对象表示异步计算的结果,它提供了检查运算是否结束的方法,由于线程属于异步计算模型,所以无法从其他线程中得到方法的返回值,在这种情况之下,就可以使用 future 来监视目标线程调用 call 方法的情况,当调用 future 的 get 方法以获取结果时,当前线程就会被阻塞,直到 call 方法结束返回结果。
public class MyCallBack {
public static void main (String[] args ) {
ExecutorService threadPool = Executors.newSingleThreadExecutor();
// 启动线程
Future<String> stringFuture = threadPool.submit(new Callable< String >() {
@Override
public String call ( ) throws Exception {return "nihao";}
} );
try {System.out.println( stringFuture.get() );
} catch (InterruptedException e) {e.printStackTrace();
} catch (ExecutionException e) {e.printStackTrace();
}
}
}