Active Object pattern
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的更多相关文章
- 多线程程序设计学习(13)Active Object pattern
Active Object[接收异步消息的对象] 一:Active Object的参与者--->客户端线程(发起某种操作请求处理)--->代理角色(工头)--->实际执行者(工人)- ...
- 设计模式-COMMOND PATTERN (ACTIVE OBJECT PATTERN是一种特殊的COMMOND PATTERN)
复用控制逻辑. 理解方式:Controller 获取到Light TeleVision Computer中的一个的对像,通过Icommond接口作用于它. ACTIVE OBJECT模式: class ...
- 设计模式- 主动对象(Active Object)
译者注:1.对象分为主动对象和被动对象,主动对象内部包含一个线程,可以自动完成动作或改变状态,而一般的被动对象只能通过被其他对象调用才有所作为.在多线程程序中,经常把一个线程封装到主动对象里面.2.在 ...
- Selenium Page object Pattern usage
使用Selenium的framework,大家免不了要使用他的page object pattern来开发适合自己的framework,原因很简单,page object 可以将测试的对象抽象成一个个 ...
- Landpy.ActiveDirecoty,按照Active Record Pattern设计的方便Lib开源发布
想方便的操作AD吗,不想记住那么多AD Attribute名称和常量?请使用Landpy.ActiveDirecoty库,按照Active Record Pattern设计的AD Lib已经在Code ...
- 敏捷软件开发(3)---COMMAND 模式 & Active Object 模式
COMMAND 模式 command模式非常简单,简单到你无法想象的地方. public interface Command { void execute(); } 这就是一个command模式的样子 ...
- 论文笔记之:Active Object Localization with Deep Reinforcement Learning
Active Object Localization with Deep Reinforcement Learning ICCV 2015 最近Deep Reinforcement Learning算 ...
- Java多线程编程模式实战指南:Active Object模式(下)
Active Object模式的评价与实现考量 Active Object模式通过将方法的调用与执行分离,实现了异步编程.有利于提高并发性,从而提高系统的吞吐率. Active Object模式还有个 ...
- Java多线程编程模式实战指南:Active Object模式(上)
Active Object模式简介 Active Object模式是一种异步编程模式.它通过对方法的调用与方法的执行进行解耦来提高并发性.若以任务的概念来说,Active Object模式的核心则是它 ...
随机推荐
- 关于Animator获取当前剪辑长度
通常下意识的肯定用这个接口 GetCurrentAnimatorStateInfo().length 但是存在一个过渡动画的问题,具体看这篇:过渡动画的测试 所以当播新的状态时直接取动画时间,取到的就 ...
- 关于UI功能解锁,UI特效动画,UI tips的再思考
之前写过一篇这样的文章,但当时的思路可行性太低 首先所有的UI面板通过发送字符串消息来告知,是否触发了解锁检测,tips检测,动画特效.可以理解为这样的接口: AsyncResult SendUIMe ...
- thread_线程间协作:wait、notify、notifyAll和Condition
经典模式:生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权.因为生产者如果不释放对临界资源的占用权,那么消费 ...
- layui进度条bug
对于动态及生成的进度条,在渲染时候要使用element.init();element.init();element.progress('demo', percent+'%');
- FileStream常用的属性和方法 (转)
对流进行操作时要引用 using System.IO; 命名空间 FileStream常用的属性和方法: 属性: CanRead 判断当前流是否支持读取,返回bool值,True表示可以读取 CanW ...
- ubuntu12.10更新源
ubuntu12.10更新源 2013-03-10 20:48:17| 分类: Linux |字号 订阅 不同的网络状况连接以下源的速度不同, 建议在添加前手动验证以下源的连接速度(ping下就 ...
- python3颜色输出
遇到一个项目,需求是在python3中,处理结果显示高亮加颜色,然后资料整理如下 ### 格式: \033[显示方式;前景色;背景色m 这里的格式是规定了m后面的输出字符颜色样式 说明: 前景色 背景 ...
- 【 D3.js 入门系列 --- 9.4 】 集群图的制作
本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 集群图( Cluster )通经常使用于表示包括与被包括关系. ...
- 对MathType做个介绍
MathType是一款专门用来编辑数学公式的公式编辑器,它里面包含有超过1000种的符号与模板,完全能够满足你的使用需要.特别是对于专业人士,非常的方便.下面我们就来给大家介绍介绍. 1.安装过程 与 ...
- Java反射基础(一)
构造方法的获取 1. 四个方法:getConstructors()获取所有的构造方法: getConstructor(parameters)获取匹配参数的构造方法: getDeclaredCons ...