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

  • 相关阅读:
    POJ 3160 Father Christmas flymouse (tarjan+spfa)
    HDU 1133 Buy the Ticket
    Problem F: [USACO 3.1.6]邮票
    无向图 割点模板 (转载)
    POJ 2117 Electricity (割点)
    HDU 4337 King Arthur's Knights
    Delphi2010中保存UTF8/Unicode编码文件的问题
    Delphi的泛型学习
    关于Ehlib5中的DBGridEh使用问题
    delphi中的命名空间
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/4325710.html
Copyright © 2011-2022 走看看