zoukankan      html  css  js  c++  java
  • MINA源码阅读之Future系

    首先Future系是对某个异步操作完成的监听;即setValue()的完成情况监听;get/setValue其实是对result字段封装,由此,可以这样讲,Future系其实对于对result字段状态的监听;

    Future又是如何被使用的的呢?     让我们看一下源码中举例:

    * IoSession session = ...;

    * CloseFuture future = session.close(true);

    * // Wait until the connection is closed

    * future.awaitUninterruptibly();

    * // Now connection should be closed.

    * assert future.isClosed();

    Future系其实是session一系列操作的监听句柄;只有一个future例外,就是connectionFuture,因为连接还没有建立的时候没有IoSession,这个时候,ConnectionFuture其实是由IoConnector的实现者的connect()返回的;

    Future的异步操作是通过wait方式来实现的,wait有两种方式,一种是可中断式的,还有一种是非中断式的,前者一旦发生了异常就跳出wait,后者发生异常继续处于wait状态(直到ready字段为true)。

    IofutureListener其本质某类IoFuture的一个监听者(包装器),里面只公开了一个API:operationComplete,等待被通知;本身可以通过调用这个包装器的方法,来对IoFuture进行操作,比如关闭;下面的代码是该接口自己封装的一个匿名函数的实现。

    static IoFutureListener<IoFuture> CLOSE = new IoFutureListener<IoFuture>() {

    public void operationComplete(IoFuture future) {

    future.getSession().close(true);

    }

    };

    下面是Future系的UML图标:

  • 相关阅读:
    iOS 整理面试题(上)
    2021年十大白马名单
    RabbitMQ:消息重复消费
    RabbitMQ:保证消息的顺序性
    RabbitMQ:保证消息的可靠性传输
    AWS S3 大文件分片上传
    rebase 用法小结
    Flask at scale
    MySQL分区
    动态规划示例题
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/4325710.html
Copyright © 2011-2022 走看看