将线程任务的提交和调用分开,可以同时处理多个不同的任务,而Future只能同时处理一个 且ActiveObject模式可以借助
ActivationQueue来完成不同的MethodRequest,每个不同的MethodRequest对应ActiveObject中接受到的主动方法,MethodRequest通过注册到ScheulerThread中的ActivationQueue来进行异步调度,此时提交任务并不是立即执行,好比System.gc()标记之后有特定的gc线程来处理.
- ActiveObject类图
- 使用
FutureResult(Future模式标记对象,可以通过回调来获取返回)和Servant(真正执行业务)构造出对应的MethodRequest - 使用
ActiveObjectFactory创建的ActiveObjectProxy将MethodRequest注册到ActivationQueue请求队列中, 并返回FutureResult对象 - 携带
ActivationQueue的SchedulerThread会定时不断的去处理ActivationQueue中提交的请求,即执行MethodRequest#execute() MethodRequest调用最终执行者Servant完成请求任务的处理并通过setResult回调方法来通知FutureResult
