原理简述

  1. 有一系列的状态值,代表各个执行阶段的状态
  2. FutureTask一般被放到线程池中异步执行
  3. 主线程调用FutureTask.get()判断状态,如果不是”完成”状态,将当前线程原子入队,并将其park下来
  4. 当线程池执行这个FutureTask完成后,执行setResult,unpark唤醒入队的线程,唤醒后主线程就从FutureTask.get()中醒过来,并返回异步执行的结果