概念
Future
接口,表示的是异步计算(异步耗时任务)的结果,该接口提供了检查异步计算是否完成、等待异步调用完成、检索异步调用结果的方法。异步调用的结果只能通过该接口的get
及其重载方法来获取。但异步调用完成时,调用get可以获取到异步计算的结果,如果没有完成调用get就会阻塞直到异步调用完成,同时还提供了cancel
方法来异步任务的调用,isCanceled
和isDone
来判断异步任务是否取消或是否完成。
Future
接口设计出来的目的主要就是为了充分利用CPU,通过多线程,在一个线程执行耗时异步任务的同时,其他线程可以继续自己的工作,其他线程可以主动获取到耗时异步任务的执行结果。这里涉及到了Java多线程编程中的一个常用的多线程并行设计模式——Future模式。关于多线程并行设计模式,可以参考一下文章:
- 并行设计模式(一)—— Future模式
- 并行设计模式(二)— Master-Worker模式
- 并行设计模式(三)— Guarded Suspeionsion模式
- 并行设计模式(四)— 不变模式
- 并行设计模式(五)— 生产者-消费者模式
主要方法
cancel(boolean mayInterruptIfRunning)
,取消异步任务的执行,mayInterruptIfRunning
为true时表示会中断正在进行的任务,mayInterruptIfRunning
表示不会中断正在执行的任务;isCancelled()
,任务是否取消;isDone()
,任务是否执行完成;get()
,获取任务的结果,如果任务尚未执行完,会阻塞直到任务执行完;get(long timeout, TimeUnit unit)
,带超时等待的获取任务执行结果,规定时间还没有获取到结果的话,会报TimeoutException
异常。
类关系
FutureTask
ForkJoinTask