Java 并发——Future详解

https://rainmonth.github.io/posts/J20210722

概念

Future接口,表示的是异步计算(异步耗时任务)的结果,该接口提供了检查异步计算是否完成、等待异步调用完成、检索异步调用结果的方法。异步调用的结果只能通过该接口的get及其重载方法来获取。但异步调用完成时,调用get可以获取到异步计算的结果,如果没有完成调用get就会阻塞直到异步调用完成,同时还提供了cancel方法来异步任务的调用,isCanceledisDone来判断异步任务是否取消或是否完成。

Future接口设计出来的目的主要就是为了充分利用CPU,通过多线程,在一个线程执行耗时异步任务的同时,其他线程可以继续自己的工作,其他线程可以主动获取到耗时异步任务的执行结果。这里涉及到了Java多线程编程中的一个常用的多线程并行设计模式——Future模式。关于多线程并行设计模式,可以参考一下文章:

主要方法

  • cancel(boolean mayInterruptIfRunning),取消异步任务的执行,mayInterruptIfRunning为true时表示会中断正在进行的任务,mayInterruptIfRunning表示不会中断正在执行的任务;
  • isCancelled(),任务是否取消;
  • isDone(),任务是否执行完成;
  • get(),获取任务的结果,如果任务尚未执行完,会阻塞直到任务执行完;
  • get(long timeout, TimeUnit unit),带超时等待的获取任务执行结果,规定时间还没有获取到结果的话,会报TimeoutException异常。

类关系

FutureTask

ForkJoinTask