`
eyesmore
  • 浏览: 376844 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

IoFuture 源码阅读

    博客分类:
  • MINA
阅读更多
阅读前请参考:
(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();
                }
            }
        }
    }

 

分享到:
评论

相关推荐

    java源码 仿360buy京东商城源码 京东JavaWeb项目源代码.zip

    java源码 仿360buy京东商城源码 京东JavaWeb项目源代码.zipjava源码 仿360buy京东商城源码 京东JavaWeb项目源代码.zipjava源码 仿360buy京东商城源码 京东JavaWeb项目源代码.zipjava源码 仿360buy京东商城源码 京东...

    java电商源代码 java电商源代码

    java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java...

    龙族源码_龙族源代码_

    《龙族源码_龙族源代码_》 在IT行业中,源代码是软件开发的基础,它是程序员用编程语言编写的指令集合,用于控制计算机执行特定任务。龙族游戏源代码是一个具体的实例,展示了大型网络游戏背后的逻辑和架构。这份源...

    Suno-AI项目源代码.zip

    Suno-AI项目源代码.zipSuno-AI项目源代码.zipSuno-AI项目源代码.zipSuno-AI项目源代码.zipSuno-AI项目源代码.zipSuno-AI项目源代码.zipSuno-AI项目源代码.zipSuno-AI项目源代码.zipSuno-AI项目源代码.zipSuno-AI项目...

    微信小程序 新闻资讯 新闻阅读器 (源代码+截图)

    微信小程序 新闻资讯 新闻阅读器 (源代码+截图)微信小程序 新闻资讯 新闻阅读器 (源代码+截图)微信小程序 新闻资讯 新闻阅读器 (源代码+截图)微信小程序 新闻资讯 新闻阅读器 (源代码+截图)微信小程序 新闻...

    微信小程序_模仿拉钩招聘APP源代码(源代码+截图)

    微信小程序_模仿拉钩招聘APP源代码(源代码+截图)微信小程序_模仿拉钩招聘APP源代码(源代码+截图)微信小程序_模仿拉钩招聘APP源代码(源代码+截图)微信小程序_模仿拉钩招聘APP源代码(源代码+截图)微信小程序_模仿拉钩...

    微信小程序 阅读读书 仿网易蜗牛读书 (源代码+截图)

    微信小程序 阅读读书 仿网易蜗牛读书 (源代码+截图)微信小程序 阅读读书 仿网易蜗牛读书 (源代码+截图)微信小程序 阅读读书 仿网易蜗牛读书 (源代码+截图)微信小程序 阅读读书 仿网易蜗牛读书 (源代码+截图)...

    Linux源代码阅读知识点及要求.PDF

    Linux源代码阅读知识点及要求.PDFLinux源代码阅读知识点及要求.PDFLinux源代码阅读知识点及要求.PDF

    网络流行游戏魔域源代码

    《网络流行游戏魔域源代码》是一份专为游戏爱好者提供的宝贵资源,它揭示了热门网络游戏“魔域”的内部工作原理。源代码是程序设计的基础,对于开发者来说,能够访问和学习这样的源代码,无疑是对游戏开发技术的一次...

    网狐棋牌源代码之斗地主完整源代码

    【网狐棋牌源代码之斗地主完整源代码】是一个专为学习和研究游戏开发而设计的资源,尤其适合对棋牌类游戏有兴趣的开发者。它包含了一套完整的斗地主游戏源代码,可以在Visual C++ 2003环境下顺利编译并运行,这为...

    vb源码/vb源代码/visual basic源码/visual basic商业代码/visual basic6.0代码大全

    vb源码/vb源代码/visual basic源码/visual basic商业代码/visual basic6.0代码大全【100套】 vb源码/vb源代码/visual basic源码/visual basic商业代码/visual basic6.0代码大全【100套】 vb源码/vb源代码/visual ...

    微信小程序 阅读读书 新浪读书 (源代码+截图)

    微信小程序 阅读读书 新浪读书 (源代码+截图)微信小程序 阅读读书 新浪读书 (源代码+截图)微信小程序 阅读读书 新浪读书 (源代码+截图)微信小程序 阅读读书 新浪读书 (源代码+截图)微信小程序 阅读读书 新浪...

    java语言开发web课程设计新闻发布系统源代码.zip

    java语言开发web课程设计新闻发布系统源代码java语言开发web课程设计新闻发布系统源代码java语言开发web课程设计新闻发布系统源代码java语言开发web课程设计新闻发布系统源代码。java语言开发web课程设计新闻发布...

    59--[忍者游戏2].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码

    59--[忍者游戏2].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码59--[忍者游戏2].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码59--[忍者游戏2].zip源码scratch2.0 3.0编程项目源文件源码案例...

    火柴人大作战.zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码

    火柴人大作战.zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码火柴人大作战.zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码火柴人大作战.zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码...

    微信小程序demo:花店(源代码+截图)

    微信小程序demo:花店(源代码+截图)微信小程序demo:花店(源代码+截图)微信小程序demo:花店(源代码+截图)微信小程序demo:花店(源代码+截图)微信小程序demo:花店(源代码+截图)微信小程序demo:花店(源代码+截图)...

    MES_源代码_C#MES系统源码_MES源码_MES_源码

    MES系统源代码

    象棋巫师源代码.zip_象棋_象棋巫师_象棋巫师 源码_象棋引擎_象棋引擎源码

    《象棋巫师源代码分析与学习指南》 在编程世界中,象棋引擎是一种复杂的算法集合,用于模拟和分析棋局。"象棋巫师"是一款著名的中国象棋软件,其背后的源代码是理解棋类游戏AI设计的宝贵资料。本篇文章将深入探讨...

    最新QQ农场牧场源码V4.5.(源代码)

    QQ农场牧场源码V4.5是一款用于开发和研究社交游戏源代码的资源,它提供了构建类似QQ农场和牧场游戏的基础框架。这个源代码版本可能是对之前V4.0的一个更新,旨在提供更好的性能、功能或者修复已知问题。源代码通常...

Global site tag (gtag.js) - Google Analytics