Skip to content

Latest commit

 

History

History
19 lines (14 loc) · 1.15 KB

ActiveObject.md

File metadata and controls

19 lines (14 loc) · 1.15 KB

ActiveObject模式

将线程任务的提交和调用分开,可以同时处理多个不同的任务,而Future只能同时处理一个 且ActiveObject模式可以借助ActivationQueue来完成不同的MethodRequest,每个不同的MethodRequest 对应ActiveObject中接受到的主动方法,MethodRequest通过注册到ScheulerThread中的ActivationQueue 来进行异步调度,此时提交任务并不是立即执行,好比System.gc()标记之后有特定的gc线程来处理.

  • ActiveObject类图

ActiveObject UML

调度步骤

  • 使用FutureResult(Future模式标记对象,可以通过回调来获取返回)和Servant(真正执行业务)构造出对应的 MethodRequest
  • 使用ActiveObjectFactory创建的ActiveObjectProxy将MethodRequest注册到ActivationQueue请求队列中, 并返回FutureResult对象
  • 携带ActivationQueue的SchedulerThread会定时不断的去处理ActivationQueue中提交的请求,即执行MethodRequest#execute()
  • MethodRequest调用最终执行者Servant完成请求任务的处理并通过setResult回调方法来通知FutureResult