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( );
}

}
}


雨露
98 声望16 粉丝