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