• 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图标:

  • 相关阅读:
    MSSQLSERVER数据库 变量和批处理
    MSSQLSERVER数据库 事务
    MSSQLSERVER数据库 使用C#来操作事务
    MSSQLSERVER数据库 视图
    Delphi中DBGrid行列颜色设置
    C#中调用SQL存储过程(带输入输出参数的例子)
    用Visual C#调用Windows API函数
    c#日期时间的操作的函数总结[转]
    C# 序列化与反序列化
    利用C#事务处理对数据库进行多重操作
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/4325710.html
Copyright © 2020-2023  润新知