Active Object 并发模式在 Java 中的应用
2010-08-06 00:00:00 来源:WEB开发网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 ();
}
};
- ››Object转换为String[]数组,或者其他类型的数组
- ››Active Directory的复制拓扑,Active Directory系...
- ››Active Directory的主要还原,Active Directory系...
- ››Active Directory的脱机碎片整理,Active Directo...
- ››Objective-c 学习: 初始化
- ››Objective C内存管理进阶: 调试内存泄露
- ››Active Object 并发模式在 Java 中的应用
- ››ActiveFile 手机文件管理
- ››Active Directory网络中DNS服务器的规划
- ››ActiveSkin 4.3软件换肤在VC中的实现
- ››Active Memory Sharing 与双 Virtual I/O Server ...
- ››ActiveX 控件在 Excel 中的运用
更多精彩
赞助商链接