Netty中的future,Listen监听机制

文章目录


重要的参考文章,点击这里

从上面这里得出的总结:

  • 1.Future接口中的方法都是getter方法而没有setter方法,也就是说这样实现的Future子类的状态是不可变的
  • 2.Promise接口继承自Future接口,它提供的setter方法与常见的setter方法大为不同。Promise从Uncompleted–>Completed的状态转变有且只能有一次,也就是说setSuccess和setFailure方法最多只会成功一个,此外,在setSuccess和setFailure方法中会通知注册到其上的监听者。为了加深对Future和Promise的理解,我们可以将Future类比于定额发票,Promise类比于机打发票。当商户拿到税务局的发票时,如果是定额发票,则已经确定好金额是100还是50或其他,商户再也不能更改;如果是机打发票,商户相当于拿到了一个发票模板,需要多少金额按实际情况填到模板指定处。显然,不能两次使用同一张机打发票打印,这会使发票失效,而Promise做的更好,它使第二次调用setter方法失败。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

方法的介绍

参考博文,点击这里

public interface Future<V> extends java.util.concurrent.Future<V> {

    // I/O操作是否执行成功
    boolean isSuccess();

    // 标记是否可以通过下面的cancel(boolean mayInterruptIfRunning)取消I/O操作
    boolean isCancellable();

    // 返回I/O操作的异常实例 - 如果I/O操作本身是成功的,此方法返回null
    Throwable cause();

    // 为当前Future实例添加监听Future操作完成的监听器 - isDone()方法激活之后所有监听器实例会得到回调
    Future<V> addListener(GenericFutureListener<? extends Future<? super V>> listener);
    Future<V> addListeners(GenericFutureListener<? extends Future<? super V>>... listeners);
    
    // 为当前Future移除监听Future操作完成的监听器
    Future<V> removeListener(GenericFutureListener<? extends Future<? super V>> listener);
    Future<V> removeListeners(GenericFutureListener<? extends Future<? super V>>... listeners);

    // 同步等待Future完成得到最终结果(成功)或者抛出异常(失败),响应中断
    Future<V> sync() throws InterruptedException;

    // 同步等待Future完成得到最终结果(成功)或者抛出异常(失败),不响应中断
    Future<V> syncUninterruptibly();

    // 等待Future完成,响应中断
    Future<V> await() throws InterruptedException;

    // 等待Future完成,不响应中断
    Future<V> awaitUninterruptibly();

    // 带超时时限的等待Future完成,响应中断
    boolean await(long timeout, TimeUnit unit) throws InterruptedException;
    boolean await(long timeoutMillis) throws InterruptedException;
    
    // 带超时时限的等待Future完成,不响应中断
    boolean awaitUninterruptibly(long timeout, TimeUnit unit);
    boolean awaitUninterruptibly(long timeoutMillis);

    // 非阻塞马上返回Future的结果,如果Future未完成,此方法一定返回null;有些场景下如果Future成功获取到的结果是null则需要二次检查isDone()方法是否为true
    V getNow();

    // 取消当前Future实例的执行,如果取消成功会抛出CancellationException异常
    @Override
    boolean cancel(boolean mayInterruptIfRunning);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值