快速业务通道

Active Object并发模式在Java中的应用 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

实现 Future,如清单 6 所示:

清单 6. Message_Future

class Message_Future { public:    // Initializes <Message_Future> to    // point to <message> immediately.    Message_Future (const Message &message);    //Other implementatio……    // Block upto <timeout> time waiting to obtain result    // of an asynchronous method invocation. Throws    // <System_Ex> exception if <timeout> expires.    Message result (Time_Value *timeout = 0) const; private:    //members definition here…… };

事实上,对于调用者来说,可以通过以下的方式从 Future 对象获得真实的执行结果 Message:

同步等待。调用者调用 Future 对象的 result() 方法同步等待,直到后端的 Servant 相应方法执行 结束,并把结果存储到了 Future 对象中来,result 返回,调用者获得 Message。

同步超时等待。调用者调用 Future 对象的 result(timeout) 方法。如果过了 timeout 时间之后, 后端的 Servant 相应方法执行仍未结束,则调用失败,否则,调用者线程被唤醒,result 方法返回,调 用者获得 Message。

异步查询。调用者可以通过调用 Future 对象定义的查询方法 ( 清单 6 没有提供相应的定义 ),查 看真实的结果是否准备好了,如果准备好了,调用 result 方法,直接获得 Message。

清单 7 是使用该 Active Object 的示例。

清单 7. Active Object 使用

MQ_Proxy message_queue; //Optioin 1. Obtain future and block thread until message arrives. Message_Future future = message_queue.get(); Message msg = future.result(); //Handle received message here handle(msg); //2. Obtain a future (does not block the client). Message_Future future = message_queue.get (); //The current thread is not blocked, do something else here... //Evaluate future and block if result is not available. Message msg = future.result (); //Handle received message here handle(msg);

从清单 7 可以看到,MQ_Proxy 对于调用者而言,和一个普通的 C++ 定义的对象并没有区别,并发的 实现细节已经被隐藏。

Active Object并发模式在Java中的应用(7)

时间:2011-10-22 IBM 李三红

Java 对 Active Object 支持

Java JDK 1.3 引入了 java.util.Timer 和 java.util.TimerTask,提供了对 timer-based 并发任务 支持,Timer 和 TimerTask 可以看作是 Active Object 设计模式在 Java 中的实现。不过,在这里我们 不打算过多讨论 Timer 及其 TimerTask。由于 Timer 和 TimerTask 的缺陷性,例如 Timer 使用单线程 执行 TimerTask 导致的 Task 调度时间的不精确性等问题。从 Java1.5 开始,Java 建议使用 ScheduledThreadPoolExecutor 作为 Timer 的替代。

在这里,我们讨论一下自 Java1.5 引入的 Executor Framework。Java1.5 的 Executor Framework 可以看作是 Active Object 设计模式在 Java 中的体现。不过 Java 的 Executor Framework 极大地简 化了我们前面所讨论的 Active Object 所定义的模式。

Java 的 Executor Framework 是一套灵活强大的异步任务执行框架,它提供了标准的方式解耦合任务 的提交与任务的执行。Java Executor 框架中的任务指的是实现了 Runnable 或者 Callable 接口的对象 。Executor 的示例用法如清单 8 所示:

清单 8. Java Executor 示例代码

public class TaskExecutionTcpServer

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号