Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且声明无法抛出异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值
java.util.concurrent.FutureTask类实现了两个接口,Runnable和Future,所以它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值.
例如:
假设有一个很耗时的返回值需要计算,并且这个返回值不是立刻需要的话,那么就可以使用这个组合,用另一个线程去计算返回值,而当前线程在使用这个返回值之前可以做其它的操作,等到需要这个返回值时,再通过Future得到.
main:
Callable<Integer> callable = new Callable<Integer>() {
public Integer call() throws Exception {
//返回0-99的随机数,100取不到
return new Random().nextInt(100);
}
};
FutureTask<Integer> future = new FutureTask<Integer>(callable);
new Thread(future).start();
try {
//这里可以做其他的操作,等需要的时候可以调用future的get方法来拿到这个计算的结果
Thread.sleep(2000);
if(future.isDone()){
System.out.println(future.get());
}
}catch (Exception e) {
e.printStackTrace();
}
java学习笔记93-Callable接口和Future接口
最新推荐文章于 2025-08-15 22:56:20 发布