快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
 the queue implementation,       // e.g., an array or a linked list, go here. };

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

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

Activation List 的实际上就是一个线程同步机制保护下的 Method Request 队列,对该队列的所有 操作 (insert/remove) 都应该是线程安全的。从本质上讲,Activation List 所基于的就是典型的生产 者 / 消费者并发编程模型,调用者线程作为生产者把 Method Request 放入该队列,Active Object 线 程作为消费者从该队列拿出 Method Request, 并执行。

实现 Scheduler,如清单 5 所示:

清单 5. MQ_Scheduler

class MQ_Scheduler { public:    // Initialize the <Activation_List> and make <MQ_Scheduler>    // run in its own thread of control.       // we call this thread as Active Object thread.    MQ_Scheduler ()    : act_list_() {      // Spawn separate thread to dispatch method requests.      // The following call is leveraging the parallelism available on native  OS       // transparently      Thread_Manager::instance ()->spawn (&svc_run,this);    }    // ... Other constructors/destructors, etc.    // Put <Method_Request> into <Activation_List>. This    // method runs in the thread of its client,i.e.    // in the proxy''s thread.    void insert (Method_Request *mr) {      act_list_.insert (mr);    }    // Dispatch the method requests on their servant    // in its scheduler''s thread of control.    virtual void dispatch () {      // Iterate continuously in a separate thread(Active Object thread).      for (;;) {        Activation_List::iterator request;        // The iterator''s <begin> method blocks        // when the <Activation_List> is empty.        for(request = act_list_.begin (); request != act_list_.end  ();++request){          // Select a method request whose          // guard evaluates to true.          if ((*request).can_run ()) {            // Take <request> off the list.            act_list_.remove (*request);            (*request).call () ;            delete *request;          }          // Other scheduling activities can go here,          // e.g., to handle when no <Method_Request>s          // in the <Activation_List> have <can_run>          // methods that evaluate to true.        }      }    } private:    // List of pending Method_Requests.    Activation_List act_list_;    // Entry point into the new thread.    static void *svc_run (void *arg) {      MQ_Scheduler *this_obj =  static_cast<MQ_Scheduler *> (args);      this_obj->dispatch ();    } };

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

时间:2011-10-22 IBM 李三

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号