http://www.ibm.com/developerworks/cn/java/j-lo-activeobject/

之所以叫, 主动对象, 区别于被动对象, 只能被动被别人调用的对象, 而主动对象内部有线程可以自行调用自己的方法.

 

Active Object是一种高级模式, 概念上和RPC有些类似, 但是实现和用途不一样

Active Object首先使用了Proxy模式, 这个和RPC一样, 用户可以象访问local function一样使用

然后Active Object关键的一步是使用command模式分离invacation和execution, proxy并没有直接运行调用逻辑, 而是封装成command发送给invoker queue

Active Object主要用于异步并发, 而RPC主要用于web service

 

The Active Object Design pattern decouples method execution from method invocation, which reside in their own threads of control.
The goal is to introduce concurrency and fault tolerance, by using asynchronous method invocation and a scheduler for handling requests.

Active Object 设计模式的本质是解耦合方法的调用 (Method invocation) 与方法的执行 (Method execution), 方法调用发生在调用者线程, 而方法的执行发生在独立于调用者线程的Active Object线程, 并且这个过程对用户透明.

 

在 Active Object 模式中,主要有以下几种类型的参与者:

  • 代理 (Proxy) :代理是Active Object所定义的对于调用者的公共接口. 运行时代理运行在调用者线程的上下文中, 负责把调用者的方法调用转换成相应的方法请求(Method Request), 并将其插入相应的Activation Queue, 最后返回给调用者Future对象
  • 方法请求(Command):方法请求定义了方法执行所需要的上下文信息, 诸如调用参数等
  • Activation Queue:负责存储所有由代理创建的, 等待执行的方法请求. 从运行时来看, Activation Queue会被包括调用者线程及其Active Object线程并发存取访问, 所以Activation Queue实现应当是线程安全的
  • 调度者(Scheduler):调度者运行在Active Object线程中, 调度者来决定下一个执行的方法请求, 而调度策略可以基于很多种标准, 比如根据方法请求被插入的顺序FIFO或者LIFO, 比如根据方法请求的优先级等等
  • Implementer: Implementer是Proxy所定义的接口的事实实现
  • Future: 调用者调用Proxy所定义的方法, 获得Future对象. 调用者可以从该Future对象获得方法执行的最终结果. 在真实的实现里, Future对象会保留一个私有的空间, 用来存放Implementer方法执行的结果

 

可以通过以下的方式从Future对象获得真实的执行结果Message:

  • 同步等待: 调用者调用Future对象的result()方法同步等待, 直到后端的Implementer相应方法执行结束, 并把结果存储到了Future对象中来, result返回, 调用者获得Message
  • 同步超时等待: 调用者调用Future对象的result(timeout)方法. 如果过了timeout时间之后, 后端的Implementer相应方法执行仍未结束, 则调用失败, 否则, 调用者线程被唤醒, result方法返回, 调用者获得Message
  • 异步查询: 调用者可以通过调用Future对象定义的查询方法, 查看真实的结果是否准备好了, 如果准备好了, 调用result方法, 直接获得Message

Active Object pattern的更多相关文章

  1. 多线程程序设计学习(13)Active Object pattern

    Active Object[接收异步消息的对象] 一:Active Object的参与者--->客户端线程(发起某种操作请求处理)--->代理角色(工头)--->实际执行者(工人)- ...

  2. 设计模式-COMMOND PATTERN (ACTIVE OBJECT PATTERN是一种特殊的COMMOND PATTERN)

    复用控制逻辑. 理解方式:Controller 获取到Light TeleVision Computer中的一个的对像,通过Icommond接口作用于它. ACTIVE OBJECT模式: class ...

  3. 设计模式- 主动对象(Active Object)

    译者注:1.对象分为主动对象和被动对象,主动对象内部包含一个线程,可以自动完成动作或改变状态,而一般的被动对象只能通过被其他对象调用才有所作为.在多线程程序中,经常把一个线程封装到主动对象里面.2.在 ...

  4. Selenium Page object Pattern usage

    使用Selenium的framework,大家免不了要使用他的page object pattern来开发适合自己的framework,原因很简单,page object 可以将测试的对象抽象成一个个 ...

  5. Landpy.ActiveDirecoty,按照Active Record Pattern设计的方便Lib开源发布

    想方便的操作AD吗,不想记住那么多AD Attribute名称和常量?请使用Landpy.ActiveDirecoty库,按照Active Record Pattern设计的AD Lib已经在Code ...

  6. 敏捷软件开发(3)---COMMAND 模式 & Active Object 模式

    COMMAND 模式 command模式非常简单,简单到你无法想象的地方. public interface Command { void execute(); } 这就是一个command模式的样子 ...

  7. 论文笔记之:Active Object Localization with Deep Reinforcement Learning

    Active Object Localization with Deep Reinforcement Learning ICCV 2015 最近Deep Reinforcement Learning算 ...

  8. Java多线程编程模式实战指南:Active Object模式(下)

    Active Object模式的评价与实现考量 Active Object模式通过将方法的调用与执行分离,实现了异步编程.有利于提高并发性,从而提高系统的吞吐率. Active Object模式还有个 ...

  9. Java多线程编程模式实战指南:Active Object模式(上)

    Active Object模式简介 Active Object模式是一种异步编程模式.它通过对方法的调用与方法的执行进行解耦来提高并发性.若以任务的概念来说,Active Object模式的核心则是它 ...

随机推荐

  1. MYSQL备份与恢复精华篇

    数据备份原理 数据备份属于数据容灾保护中的内容,所有的数据备份系统设计都基于这五个元素,备份源.备份目标.传输网络.备份引擎和备份策略.用户按照需要制定备份策略,使用定时任务执行备份脚本,使用备份引擎 ...

  2. 从Python的角度来看编码与解码

    导语: Python2和Python3中,因为默认字符集的不同而造成的麻烦,简直是程序员的梦魇!要彻底告别这个麻烦,就需要从本质上来理解编码和解码. 为什么要有编码? 对于不会英文的中国人来说,将英文 ...

  3. 在Windows7和Ubuntu上编译安装MICO

    MICO是CORBA标准的一个实现.开源并且被广泛使用. 首先的首先,看用户手册,在页面"http://www.mico.org/docu.html"找到一本教材"MIC ...

  4. UVALive 7712 Confusing Manuscript 字典树 查询与s的编辑距离为1的字符串数量

    /** 题目:UVALive 7712 Confusing Manuscript 链接:https://vjudge.net/problem/UVALive-7712 题意:给定n个不同的字符串,f( ...

  5. 【复习】密码算法——AES

    0 AES简介 1997年1月2号,美国国家标准技术研究所宣布希望征集一个安全性能更高的加密算法(AES)[3],用以取代DES.我们知道DES的密钥长度是64 bits,但实际加解密中使用的有效长度 ...

  6. JXTA 2: 具有高性能、海量伸缩性的 P2P 网络

    这是来自developerWorks的一篇文章,地址是 https://www.ibm.com/developerworks/cn/java/j-jxta2/ ———————————————————— ...

  7. transform使用参考指南

    transform使用参考指南 2010-09-18 16:06:33|  分类: html5+css3|字号 订阅     语法 transform :none | <transform-fu ...

  8. JobTracker作业调度分析

    转自:http://blog.csdn.net/Androidlushangderen/article/details/41408517 JobTracker的作业调度给我感觉就是比较宏观意义上的操作 ...

  9. 嵌入式开发之davinci--- spi 中的时钟极性CPOL和相位CPHA

    PI的极性Polarity和相位Phase,最常见的写法是CPOL和CPHA,不过也有一些其他写法,简单总结如下:(1) CKPOL (Clock Polarity) = CPOL = POL = P ...

  10. 【BZOJ】3203: [Sdoi2013]保护出题人(几何+三分+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3203 wa无数次QAQ,犯sb错....一是数组没有引用...二是输出转成了int(越界了sad). ...