# introduce

通常任务执行过程都是同步进行的,一个简单的执行如下

// ① 获取数据,耗时较长,阻塞
Object data = getData();
// ② 其他事务1
doOther1();
// ③ 其他事务2
doOther2();
// ④ 处理 ① 获取到的结果
doProcessData();

在上面伪代码执行中,②,③ 是无关紧要的执行逻辑,但是执行过程中需要等待 ① 获取数据之后才能进行执行。

假设:

  • ① 耗时 10s
  • ② 耗时 5s
  • ③ 耗时 4s
  • ④ 耗时 3s

则执行耗时时间线如下:

Future 设计模式能够在 ① 获取数据 马上返回一个 Future (凭证),当执行 ④ 需要依赖到 ① 的结果时通过 Future 去获取结果。其执行时间线如下:

# 实现

简易实现

执行逻辑:

  • 没有回调时

    用户通过 FutureService#submit 提交执行任务,得到一个 Future 凭证,当需要得到执行结果时通过 Future#get 获取执行结果。

  • 有回调时

    用户通过 FutureService#submit 提交执行任务,得到一个 Future 凭证,用户可以不执行 Future#get 获取结果,任务在执行完成后会主动回调处理逻辑。

# 演示代码-没有回调

# 演示代码-有回调

精彩内容推送,请关注公众号!
最近更新时间: 5/14/2020, 12:49:41 PM