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

MINA源码阅读之Future系

你可能感兴趣的:(future)