Netty入门学习(九):Netty的Future与JDK的Future学习

背景
  1. 理解在一个异步编程中的Future含义(JDK)。会存在缺陷。
  2. 事件驱动的异步编程的Future的含义(Netty)。添加监听器逻辑(观察者设计模式)。

理解
  1. Netty的Future与JDK的Future的核心类继承体系结构图
    在这里插入图片描述
JDK 的Future学习
  1. Future定义
    代表异步计算的结果。

  2. 提供的功能
    检测计算是否已经完成;
    阻塞等待计算的完成;
    获取异步计算结果;

  3. 使用范例1
    在这里插入图片描述
    这里的代码逻辑过程是:异步执行serarch()方法;然后程序继续往下执行其他逻辑;最后程序调用future.get()方法阻塞等待

    这里其实是有一个缺陷:就是get()方法调用者,不知道什么时候,这个异步方法成功执行并返回Future

  4. 使用范例2
    在这里插入图片描述

Netty的Future学习
  1. Future定义
    一个异步操作的结果。(在Netty中所有的I/O操作全是异步的)
  2. 提供的功能 :细化了JDK 的Future的功能
    判断是否成功,而不是是否完成方法;添加监听器逻辑。
  3. ChannelFuture接口对其功能进行了完整的描述。尤其是I/O操作过程的状态变更,及其添加的监听器逻辑过程。

JDK的Future VS Netty的Future
Future状态变更是否有监听器
JDK状态变更控制不细致,异步完成:取消,成功,失败没有
Netty状态变更控制细致,独立处理:成功的,失败的,取消的

JDK中的Future只提供了isDone()方法,它只是告诉程序异步操作是否完成,而它的完成包含3个情况,取消完成,成功完成和失败完成,都是isDone()等于true的情况。所以它控制是不精准的。而Netty中的Future对其进行了更加细化的状态控制。

从范例1中可以理解到get()这个阻塞方法,会浪费很多等待的时间,因为程序并不能精确知道异步操作什么时候完成。而Netty中添加了监听器逻辑,就可以精准地知道异步操作完成,立即执行后续逻辑,而无需阻塞等待异步执行结果。


小结
  1. 一个异步编程,一定要基于事件的发生,采用监听器逻辑去实现。这是一个最佳实践。
  2. 监听器的实现是观察者设计模式的实践。
  3. 理解Netty的Future在JDK的Future之上丰富了功能逻辑。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值