mina中iofuture 介绍
来源:互联网 发布:活着电影 知乎 编辑:程序博客网 时间:2024/06/06 17:40
(8.)IoFuture:
在Mina 的很多操作中,你会看到返回值是XXXFuture,实际上他们都是IoFuture 的子类,
看到这样的返回值,这个方法就说明是异步执行的,主要的子类有ConnectFuture、
CloseFuture 、ReadFuture 、WriteFuture 。这个接口的大部分操作都和
java.util.concurrent.Future 接口是类似的,譬如:await()、awaitUninterruptibly()
等,一般我们常用awaitUninterruptibly()方法可以等待异步执行的结果返回。
这个接口有如下常用的方法:
A. IoFuture addListener(IoFutureListener<?> listener):
这个方法用于添加一个监听器, 在异步执行的结果返回时监听器中的回调方法
operationComplete(IoFuture future),也就是说,这是替代awaitUninterruptibly()方
法另一种等待异步执行结果的方法,它的好处是不会产生阻塞。
B. IoFuture removeListener(IoFutureListener<?> listener):
这个方法用于移除指定的监听器。
C. IoSession getSession():
这个方法返回当前的IoSession。
举个例子,我们在客户端调用connect()方法访问Server 端的时候,实际上这就是一个异
步执行的方法,也就是调用connect()方法之后立即返回,执行下面的代码,而不管是否连
接成功。那么如果我想在连接成功之后执行一些事情(譬如:获取连接成功后的IoSession
对象),该怎么办呢?按照上面的说明,你有如下两种办法:
第一种:
ConnectFuture future = connector.connect(new InetSocketAddress(
HOSTNAME, PORT));
// 等待是否连接成功,相当于是转异步执行为同步执行。
future.awaitUninterruptibly();
// 连接成功后获取会话对象。如果没有上面的等待,由于connect()方法是异步的,session
可能会无法获取。
session = future.getSession();
第二种:
ConnectFuture future = connector.connect(new InetSocketAddress(
HOSTNAME, PORT));
future.addListener(new IoFutureListener<ConnectFuture>() {
@Override
public void operationComplete(ConnectFuture future) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
IoSession session = future.getSession();
System.out.println("++++++++++++++++++++++++++++");
}
});
System.out.println("*************");
为了更好的看清楚使用监听器是异步的,而不是像awaitUninterruptibly()那样会阻塞主
线程的执行,我们在回调方法中暂停5 秒钟,然后输出+++,在最后输出***。我们执行代码
之后,你会发现首先输出***(这证明了监听器是异步执行的),然后IoSession 对象Created,
在Mina 的很多操作中,你会看到返回值是XXXFuture,实际上他们都是IoFuture 的子类,
看到这样的返回值,这个方法就说明是异步执行的,主要的子类有ConnectFuture、
CloseFuture 、ReadFuture 、WriteFuture 。这个接口的大部分操作都和
java.util.concurrent.Future 接口是类似的,譬如:await()、awaitUninterruptibly()
等,一般我们常用awaitUninterruptibly()方法可以等待异步执行的结果返回。
这个接口有如下常用的方法:
A. IoFuture addListener(IoFutureListener<?> listener):
这个方法用于添加一个监听器, 在异步执行的结果返回时监听器中的回调方法
operationComplete(IoFuture future),也就是说,这是替代awaitUninterruptibly()方
法另一种等待异步执行结果的方法,它的好处是不会产生阻塞。
B. IoFuture removeListener(IoFutureListener<?> listener):
这个方法用于移除指定的监听器。
C. IoSession getSession():
这个方法返回当前的IoSession。
举个例子,我们在客户端调用connect()方法访问Server 端的时候,实际上这就是一个异
步执行的方法,也就是调用connect()方法之后立即返回,执行下面的代码,而不管是否连
接成功。那么如果我想在连接成功之后执行一些事情(譬如:获取连接成功后的IoSession
对象),该怎么办呢?按照上面的说明,你有如下两种办法:
第一种:
ConnectFuture future = connector.connect(new InetSocketAddress(
HOSTNAME, PORT));
// 等待是否连接成功,相当于是转异步执行为同步执行。
future.awaitUninterruptibly();
// 连接成功后获取会话对象。如果没有上面的等待,由于connect()方法是异步的,session
可能会无法获取。
session = future.getSession();
第二种:
ConnectFuture future = connector.connect(new InetSocketAddress(
HOSTNAME, PORT));
future.addListener(new IoFutureListener<ConnectFuture>() {
@Override
public void operationComplete(ConnectFuture future) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
IoSession session = future.getSession();
System.out.println("++++++++++++++++++++++++++++");
}
});
System.out.println("*************");
为了更好的看清楚使用监听器是异步的,而不是像awaitUninterruptibly()那样会阻塞主
线程的执行,我们在回调方法中暂停5 秒钟,然后输出+++,在最后输出***。我们执行代码
之后,你会发现首先输出***(这证明了监听器是异步执行的),然后IoSession 对象Created,
系统暂停5 秒,然后输出+++,最后IoSession 对象Opened,也就是TCP 连接建立。
个人感觉柱塞方式比较直观 也容易实现
- mina中iofuture 介绍
- Mina源码学习-IoFuture
- Mina IoFuture研究
- Mina学习笔记之IoFuture
- Mina-2.0.7源码学习 (4) --- IoFuture
- Mina源码阅读笔记(六)—Mina异步IO的实现IoFuture
- Mina源码阅读笔记(六)—Mina异步IO的实现IoFuture
- Mina源码阅读笔记(六)—Mina异步IO的实现IoFuture
- Mina Iobuffer中常用方法与介绍
- mina介绍
- Mina介绍
- Apache MINA 项目介绍
- Apache Mina介绍
- MINA之简单介绍
- MINA 入门介绍
- Apache MINA 基本介绍
- Mina状态机介绍(Introduction to mina-statemachine)
- Mina状态机介绍(Introduction to mina-statemachine)
- 推荐系统实践
- 【OSC手机App技术解析】- 集成新浪微博Android SDK
- maven添加jar包到本地库
- Linux Socket网络编程(理论分析+充足的示例)
- find命令是功能最强的命令之一
- mina中iofuture 介绍
- Dreamweaver CS5学习
- ios 定位服务
- nginx[+spawn-fcgi]+flup+webpy服务搭建
- 异步I/O机制
- OpenCV学习笔记(五十三)——新版本2.4.2简介&FREAK和ORB特征描述子效果对比features2d
- Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
- 维护数据的完整性
- 数据库对象——触发器——轻松走进数据库系列六