netty sync方法_Netty 源码解析(三): Netty 的 Future 和 Promise

本文是 Netty 源码解析系列的第三篇,主要探讨了 Netty 中的 Future 和 Promise 概念,以及它们在异步编程中的应用。Netty 的 Future 和 JDK 中的 Future 类似,但增加了额外的方法,如 isSuccess() 和 cause()。此外,ChannelFuture 是 Future 的子接口,与 Channel 操作相关。Promise 接口用于标记任务状态,提供设置成功或失败结果的方法,并支持回调监听器。DefaultPromise 是一个常用的 Promise 实现,用于演示如何创建和使用 Promise。文章通过实例展示了如何添加监听器、设置结果并同步等待任务完成。
摘要由CSDN通过智能技术生成

今天是猿灯塔“365篇原创计划”第三篇。

接下来的时间灯塔君持续更新Netty系列一共九篇

Netty 源码解析(一): 开始

Netty 源码解析(二): Netty 的 Channel

当前:Netty 源码解析(三): Netty 的 Future 和 Promise

Netty 源码解析(四): Netty 的 ChannelPipeline

Netty 源码解析(五): Netty 的线程池分析

Netty 源码解析(六): Channel 的 register 操作

Netty 源码解析(七): NioEventLoop 工作流程

Netty 源码解析(八): 回到 Channel 的 register 操作

Netty 源码解析(九): connect 过程和 bind 过程分析

今天呢!灯塔君跟大家讲:

Netty 的 Future 和 Promise

Netty 中的异步编程: Future 和 Promise

Netty 中非常多的异步调用,所以在介绍更多 NIO 相关的内容之前,我们来看看它的异步接口是怎么使用的。前面我们在介绍 Echo 例子的时候,已经用过了 ChannelFuture 这个接口了:

5ac6f9283e71850c57b2e939f46843ab.png

争取在看完本节后,读者能搞清楚上面的这几行划线部分是怎么走的。

关于 Future 接口,我想大家应该都很熟悉,用得最多的就是在使用 Java 的线程池 ThreadPoolExecutor 的时候了。在 submit 一个任务到线程池中的时候,返回的就是一个 Future 实例,通过它来获取提交的任务的执行状态和最终的执行结果,我们最常用它的 isDone() 和 get() 方法。下面是 JDK 中的 Future 接口 java.util.concurrent.Future:

public interface Future {
// 取消该任务
boolean cancel(boolean mayInterruptIfRunning);
// 任务是否已取消
boolean isCancelled();
// 任务是否已完成
boolean isDone();
// 阻塞获取任务执行结果
V get() throws InterruptedException, ExecutionException;
// 带超时参数的获取任务执行结果
V get(long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
}

Netty 中的 Future 接口(同名)继承了 JDK 中的 Future 接口,然后添加了一些方法:// io.netty.util.concurrent.Future

public interface Future extends java.util.concurrent.Future {
// 是否成功
boolean isSuccess();
// 是否可取消
boolean isCancellable();
// 如果任务执行失败,这个方法返回异常信息
Throwable cause();
// 添加 Listener 来进行回调
Future addListener(GenericFutureListener extends Future super V>> listener);
Future addListeners(GenericFutureListener extends Future super V>>... listeners);
Future removeListener(GenericFutureListener extends Future super V>> listener);
Future removeListeners(GenericFutureListener extends Future super V>>... listeners);
// 阻塞等待任务结束,如果任务失败,将“导致失败的异常”重新抛出来
Future sync() throws InterruptedException;
// 不响应中断的 sync(),这个大家应该都很熟了
Future syncUninterruptibly();
// 阻塞等待任务结束,和 sync() 功能是一样的,不过如果任务失败,它不会抛出执行过程中的异常
Future await() throws InterruptedException;
Future awaitUninterruptibly();
boolean await(long timeout, TimeUnit unit) throws InterruptedException;
boolean await(long timeoutMillis) throws InterruptedException;
boolean awaitUninterruptibly(long timeout, TimeUnit unit);
boolean awaitUninterruptibly(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值