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( );
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。