zoukankan      html  css  js  c++  java
  • Netty概念之 Future 和 Promise

    (一)jdk中future和netty中future的比较

    jdk中future:

    // 取消异步操作
    boolean cancel(boolean mayInterruptIfRunning);
    // 异步操作是否取消
    boolean isCancelled();
    // 异步操作是否完成,正常终止、异常、取消都是完成
    boolean isDone();
    // 阻塞直到取得异步操作结果
    V get() throws InterruptedException, ExecutionException;
    // 同上,但最长阻塞时间为timeout
    V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;

    jdk中future的特点:
    1.无论结果是成功还是失败还是取消,返回的都是isdone();
    2.而且我们在异步操作触发和结束的时候比较关心其他的一些操作,在jdk的future中无法进行补充。所以netty对future做了扩展。

    netty中future(以下为扩展内容):

    // 异步操作完成且正常终止
    boolean isSuccess();
    // 异步操作是否可以取消
    boolean isCancellable();
    // 异步操作失败的原因
    Throwable cause();
    // 添加一个监听者,异步操作完成时回调,类比javascript的回调函数
    Future<V> addListener(GenericFutureListener<? extends Future<? super V>> listener);
    Future<V> removeListener(GenericFutureListener<? extends Future<? super V>> listener);
    // 阻塞直到异步操作完成
    Future<V> await() throws InterruptedException;
    // 同上,但异步操作失败时抛出异常
    Future<V> sync() throws InterruptedException;
    // 非阻塞地返回异步结果,如果尚未完成返回null
    V getNow();

    netty中future的特点:
    1.操作结果分为success,fail,canceled三种;
    2.并且通过addlisteners()方法可以添加回调操作,即触发或者完成时需要进行的操作;
    3.await()和sync(),可以以阻塞的方式等待异步完成;getnow()可以获得异步操作的结果,如果还未完成则返回Null;

    netty中的promise扩展自future,相比之下多了 可写 的api


    Promise<V> setSuccess(V result);


    boolean trySuccess(V result);


    Promise<V> setFailure(Throwable cause);


    boolean tryFailure(Throwable cause);


    boolean setUncancellable();

  • 相关阅读:
    Ubuntu 16 编译装python2.7
    配置ubunto 流量使用限制 python 实现简单 http server
    vnstat 流量统计 并附带一个小 php 查看流量的页面
    ubunto 免输入密码 登录 putty ssh-keygen
    nes 红白机模拟器 第5篇 全屏显示
    arm 添加 samb 文件共享
    arm 添加 ftp server 之 bftpd
    Tga图片格式分析以及程序实现
    领导力:刘邦的管理之道
    AS3:辨析ROLL_OVER与MOUSE_OVER,ROLL_OUT与MOUSE_OUT
  • 原文地址:https://www.cnblogs.com/ironroot/p/8583045.html
Copyright © 2011-2022 走看看