从任务获取数据: Callable 接口与 Future 接口
执行器框架也允许我们执行其他基于 Callable 接口和 Future 接口返回值的任务。
Callable 是一种函数接口,它定义了 call() 方法。
call() 方法可以抛出一种与 Runnable 接口不同的校验异常。
Callable 接口的处理结果要用 Future 接口来打包,而 Future 接口则描述了异步计算的结果。
基本内容
小结
-
学习了与返回结果的任务打交道时用到的几种机制。
这些任务都基于 Callable 接口,而 Callable 接口中声明了 call() 方法。该接口是一个由 call() 方法返回的类进行参数化的接口。 - 当在执行器中执行一个 Callable 任务时,总是要获得 Future 接口的一个实现。
可以使用这个对象来撤销该任务的执行,通过该对象来知晓任务是否完成执行,或者获得 call() 方法所返回的结果。 - 可以通过三种方式将 Callable 任务发送给执行器。
- 通过 submit() 方法可以发送一个任务,而且将很快获得一个与该任务相关联的 Future 对象。
- 通过 invokeAll() 方法,可以发送一个任务列表,并且当所有任务都完成执行之后获得一个 Future 对象列表。
- 通过 invokeAny() 方法,可以发送一个任务列表,而且将接收到第一个执行结束且没有抛出异常的任务的结果(并不是一个 Future 对象)。剩余其他任务将被撤销。