Future对象
作用:
接收异步线程返回的结果
场景:
任务A和任务B,如果任务A需要任务B的返回结果,两种实现:
1:AB在一个线程中,A等待B返回结果,如果B的处理时间长,A不能做其他事情
2:A,B在不同线程中,A可以阻塞等B的结果,也可以先做其他工作,一段时间以后询问B
开启线程B:
ExecutorService threadPool = Executors.newCachedThreadPool();//项目中用的ThreadPoolExecutor
Future<Integer> future = threadPool.submit(new Callable<Integer>() { //调用submit方法,传入一个callable对象,重写call方法
public Integer call() throws Exception {
......
}
});
使用future.get方法获取返回值
不带参数的get方法是阻塞方法,只要线程为返回结果就会一直阻塞直到有结果为止。
可以使用isDone方法判断线程是否结束。也可以使用带参数的get方法,若指定时间内还没有得到线程返回值,会抛出TimeoutException的异常。