Netty中的Future与Promise

Posted 逅弈逐码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Netty中的Future与Promise相关的知识,希望对你有一定的参考价值。

Netty中所有的IO操作都是异步的,所有的IO调用会立即返回,但是并不保证调用结束时该IO请求已经完成。而调用后立即返回的对象在Netty中就是一个ChannelFuture。ChannelFuture的一个继承关系如下图所示:

首先我们需要了解JDK中Future的执行原理,可以用下面的图简单的描述一下:

要获取一个Future的结果,在JDK中是通过判断Future是否执行完毕,如果没有执行完毕则会等待,否则直接返回结果。

但这样其实还是存在一个阻塞的问题,当Future未执行完毕时,当前线程会等待直到任务执行完毕。而Netty在JDK的Future的基础上创建了一个新的Future接口,该接口除了拥有JDK中Future的功能之外,最重要的是他增加了监听器( Listener)的功能。即创建完一个Future之后,可以在这个Future上添加一个监听器,当任务执行完毕后,会自动回调监听器中指定的方法,如下图所示:

Netty中除了重新创建了一个Future接口外,还创建了一个Promise接口,而Promise接口是继承自Future的。Promise增强了Future的功能,通过Promise可以为Future设置结果,包括成功时的结果或者失败时的原因。简单的说Netty中Future是 read-only的,而Promise则是 writable的。



以上是关于Netty中的Future与Promise的主要内容,如果未能解决你的问题,请参考以下文章

[netty4][netty-common]Future与Promise分析

Netty 中的异步编程 Future 和 Promise

7. Netty源码分析之Future和Promise

Future和Promise的分析

95-24-020-Future-Future简介

c++ 中的 std::promise 和 std::future