阅读前请参考:
(1)
http://eyesmore.iteye.com/blog/243648 写道
Future模式入门
MINA2.0中关于Future模式的应用体系:
IoFuture(Future异步调用的需求)
|
|==DefaultIoFuture(把Future模式给实现了,针对IoSession的不同操作有不同的Future,例如ConnectFuture,ReadFuture,WriteFuture,CloseFuture。)
public interface ConnectFuture extends IoFuture
例如:public class DefaultConnectFuture extends DefaultIoFuture implements ConnectFuture.
这里也可以看到OOA的一个思想: 我们如何进行分类呢?我们常常发现有些东西只有一部分是公共的,其他部分是个性的,于是我们把公共的东西单独抽象成一个超接口(比如这里的IoFuture),其他个性的东西,是在公共的基础上增加个性的东西,所以public interface ConnectFuture extends IoFuture;public interface ReadFuture extends IoFuture等等;同时,我们公共的东西可以公共的实现public class DefaultIoFuture implents IoFuture。然后个性的东西,在公共实现的基础上完成(重用:可以选择继承,或组合),于是public class ConnetFuture extends DefaultIoFuture implents ConnectFuture,其中extends DefaultIoFuture体现了用继承的方式重用公共的操作,implments ConnectFuture体现了在公共的基础上再去实现个性的东西。
如果要看Future机制的话,我们只需要了解DefaultIoFuture这个公共操作类。我们首先看下IoFuture描述了哪些功能需求:
(1)boolean isReady 判断“真实东西”是否准备完毕;
(2)await/awaitUninterruptibly 表示如果客户比较着急(可能在真实东西准备好之前就想提货),程序会阻塞客户,这里相对我前面的《Future模式入门》中提供的措施要丰富些,用户可以选择长期阻塞await【内部最终实现是lock.wait()】,或者在一定时间内阻塞await(long timeout)【内部最终实现是lock.wait(timeout)】;
(3)addListener/removeListerner 这个东西和Future模式没有什么关系,只是个观察者模式。
(4)《Future模式入门》中说了还需要回答一个问题是: 当真实的数据准备好的时候,真实数据怎么通知这个Future说数据好了,在DefaultIoFuture中有一个protected void setValue(object newVaule)方法,以供提供真实数据的人调用。(这里顺便提下刚才的addListener/removeListener:当Future对应的真实数据准备好时,方法setValue会被调用,那么Future接收到这个通知真实数据OK时,利用观察者模式把这个消息再向它的观察着进行广播下。)
private boolean await0(long timeoutMillis, boolean interruptable) throws InterruptedException {
long startTime = timeoutMillis <= 0 ? 0 : System.currentTimeMillis();
long waitTime = timeoutMillis;
synchronized (lock) {
if (ready) {
return ready;
} else if (waitTime <= 0) {
return ready;
}
waiters++;
try {
for (;;) {
try {
lock.wait(Math.min(waitTime, DEAD_LOCK_CHECK_INTERVAL));
} catch (InterruptedException e) {
if (interruptable) {
throw e;
}
}
if (ready) {
return true;
} else {
waitTime = timeoutMillis
- (System.currentTimeMillis() - startTime);
if (waitTime <= 0) {
return ready;
}
}
}
} finally {
waiters--;
if (!ready) {
checkDeadLock();
}
}
}
}
分享到:
相关推荐
非常好的源代码阅读工具InsightSetup.exe
小程序源码 看书阅读前端 看书阅读带后端 (代码源)小程序源码 看书阅读前端 看书阅读带后端 (代码源)小程序源码 看书阅读前端 看书阅读带后端 (代码源)小程序源码 看书阅读前端 看书阅读带后端 (代码源)小程序源码 ...
微信小程序 拼车源码 滴滴拼车 (源代码+截图)微信小程序 拼车源码 滴滴拼车 (源代码+截图)微信小程序 拼车源码 滴滴拼车 (源代码+截图)微信小程序 拼车源码 滴滴拼车 (源代码+截图)微信小程序 拼车源码 滴滴...
精典源码delphi源码下载 超市管理系统源代码.zip 精典源码delphi源码下载 超市管理系统源代码.zip 精典源码delphi源码下载 超市管理系统源代码.zip 精典源码delphi源码下载 超市管理系统源代码.zip 精典源码delphi...
java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源...
微信小程序 新闻资讯 新闻阅读器 (源代码+截图)微信小程序 新闻资讯 新闻阅读器 (源代码+截图)微信小程序 新闻资讯 新闻阅读器 (源代码+截图)微信小程序 新闻资讯 新闻阅读器 (源代码+截图)微信小程序 新闻...
微信小程序全套源代码(后台、小程序php)(源码).zip微信小程序全套源代码(后台、小程序php)(源码).zip微信小程序全套源代码(后台、小程序php)(源码).zip微信小程序全套源代码(后台、小程序php)(源码)...
Windows平台下的源代码阅读工具Source Insight 企业级源码查看和编辑工具,特别是在WINDOWS与Linux环境下的切换是相当方便的。国内外一线IT企业,嵌入式开发的王牌软件。 为了方便地学习Linux源程序,我们不妨...
MATLAB源代码MATLAB源码大集合220MB上千个源码文件: 2013全国大学生数学建模B题matlab代码.rar 802.11a OFDM MATLAB仿真代码!(推荐).rar MATLAB DCT水印源程序代码.rar MATLAB GUI 实例.rar matlab GUI实例.rar ...
Linux源代码阅读知识点及要求.PDFLinux源代码阅读知识点及要求.PDFLinux源代码阅读知识点及要求.PDF
龙族游戏源代码,大型网络游戏源码,可编译
远程桌面源代码_c#teamviewer源码,teamviewer源码 一个简单的远程桌面源代码 C#语言编写 下载这个资源您可以学习C#的Socket使用方法 屏幕截图技术 图像编码技术 以及激发Windows键盘和鼠标事件
智云全能API接口源码 接口源代码全开源智云全能API接口源码 接口源代码全开源智云全能API接口源码 接口源代码全开源智云全能API接口源码 接口源代码全开源智云全能API接口源码 接口源代码全开源智云全能API接口源码 ...
Iphone开发系列源码——iPhone版Wordpress源代码Iphone开发系列源码——iPhone版Wordpress源代码Iphone开发系列源码——iPhone版Wordpress源代码Iphone开发系列源码——iPhone版Wordpress源代码Iphone开发系列源码...
java源码 仿360buy京东商城源码 京东JavaWeb项目源代码.zipjava源码 仿360buy京东商城源码 京东JavaWeb项目源代码.zipjava源码 仿360buy京东商城源码 京东JavaWeb项目源代码.zipjava源码 仿360buy京东商城源码 京东...
图片旋转 源代码 源代码 源代码 源代码 源代码源代码源代码源代码源代码
源码阅读工具Understand-3.1-Linux-64bit,源码安装包,使用手册,注册号
小程序源码 asp后端 看书阅读带后端 (代码源)小程序源码 asp后端 看书阅读带后端 (代码源)小程序源码 asp后端 看书阅读带后端 (代码源)小程序源码 asp后端 看书阅读带后端 (代码源)小程序源码 asp后端 看书阅读带...