阅读前请参考:
(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();
}
}
}
}
分享到:
相关推荐
"引擎源码.zipGameOfMir俗称GOM引擎源代码全套版"这个压缩包包含的是GameOfMir(GOM)引擎的源代码,这是一款广泛应用于网络游戏开发的引擎,特别是对于传奇类游戏的开发有着重要的作用。GOM引擎以其强大的功能和...
《龙族源码_龙族源代码_》 在IT行业中,源代码是软件开发的基础,它是程序员用编程语言编写的指令集合,用于控制计算机执行特定任务。龙族游戏源代码是一个具体的实例,展示了大型网络游戏背后的逻辑和架构。这份源...
Suno-AI项目源代码.zipSuno-AI项目源代码.zipSuno-AI项目源代码.zipSuno-AI项目源代码.zipSuno-AI项目源代码.zipSuno-AI项目源代码.zipSuno-AI项目源代码.zipSuno-AI项目源代码.zipSuno-AI项目源代码.zipSuno-AI项目...
40--[地铁跑酷].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码40--[地铁跑酷].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码40--[地铁跑酷].zip源码scratch2.0 3.0编程项目源文件源码案例素材源...
MATLAB源代码MATLAB源码大集合220MB上千个源码文件: 2013全国大学生数学建模B题matlab代码.rar 802.11a OFDM MATLAB仿真代码!(推荐).rar MATLAB DCT水印源程序代码.rar MATLAB GUI 实例.rar matlab GUI实例.rar ...
通过阅读和理解Target Bands.MQ4源代码,交易者可以了解其背后的逻辑,包括如何计算价格波动、何时发出买入/卖出信号、如何设置止损和止盈等。这对于定制个人化的交易策略或者优化现有策略具有极大价值。 其次,源...
微信小程序_模仿拉钩招聘APP源代码(源代码+截图)微信小程序_模仿拉钩招聘APP源代码(源代码+截图)微信小程序_模仿拉钩招聘APP源代码(源代码+截图)微信小程序_模仿拉钩招聘APP源代码(源代码+截图)微信小程序_模仿拉钩...
微信小程序全套源代码(后台、小程序php)(源码).zip微信小程序全套源代码(后台、小程序php)(源码).zip微信小程序全套源代码(后台、小程序php)(源码).zip微信小程序全套源代码(后台、小程序php)(源码)...
微信小程序 阅读读书 仿网易蜗牛读书 (源代码+截图)微信小程序 阅读读书 仿网易蜗牛读书 (源代码+截图)微信小程序 阅读读书 仿网易蜗牛读书 (源代码+截图)微信小程序 阅读读书 仿网易蜗牛读书 (源代码+截图)...
【标题】"src_22src_冒险岛源代码_079冒险岛源码_冒险岛_冒险岛079_" 指的是一个关于《冒险岛》游戏的源代码包,特别是针对游戏版本079的源代码。这个标题暗示了文件内容可能包含了用于构建和维护该款游戏的核心编程...
html表白特效源代码《浪漫的html表白源代码,html表白网页制作源码》 可以玩的网页 节日送给女朋友 礼物【修正版】 打开网页 会出现心形排列的字母 用鼠标移动字母 从左到右排列成 MerryChristmas 会有奇迹出现 点开...
球球大作战.zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码球球大作战.zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码球球大作战.zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码球球大...
借助IDEA的强大功能,可以轻松地阅读和理解Spark的源代码,这对于深入研究Spark的工作原理、提升大数据处理能力具有重要意义。此外,对于有兴趣参与Spark社区贡献的开发者而言,这也是一个很好的起点。希望本文能够...
《网络流行游戏魔域源代码》是一份专为游戏爱好者提供的宝贵资源,它揭示了热门网络游戏“魔域”的内部工作原理。源代码是程序设计的基础,对于开发者来说,能够访问和学习这样的源代码,无疑是对游戏开发技术的一次...
《易语言小刀电子书阅读器源码》是一款基于易语言开发的电子书阅读软件,其源代码提供了详细的实现逻辑,对于学习易语言和电子书阅读器开发的开发者来说,是一份宝贵的参考资料。易语言是一种面向对象、可视化编程的...
《奇迹GAMESERVER源代码》是一份用于构建和管理网络游戏服务器的重要资源,尤其对于那些对“奇迹”游戏系列有深入研究或开发需求的开发者来说,它具有极高的价值。源代码是软件开发的基础,它揭示了游戏服务器运行的...
59--[忍者游戏2].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码59--[忍者游戏2].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码59--[忍者游戏2].zip源码scratch2.0 3.0编程项目源文件源码案例...
002用Python设计第一个游戏(课件+源代码) 004改进我们的小游戏(课件+源代码) 005闲聊之Python的数据类型(课件+源代码) 007了不起的分支和循环(课件) 008了不起的分支和循环2(课件+源代码) 009了不起的分支...
火柴人大作战.zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码火柴人大作战.zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码火柴人大作战.zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码...
"AMI BIOS源代码"是BIOS开发的重要参考资料,特别是对于那些想要深入理解BIOS工作原理、进行BIOS定制或开发的工程师来说,具有极高的学习价值。 《BIOS研发技术剖析》这本书很可能是对BIOS设计与实现的详细讲解,而...