Active Object 模式是Command模式的一种,是实现多线程控制的一项古老技术 .
在《敏捷软件开发》这本书中描述的算法如下:
1、构造一个命令。(实现Command模式的一个命令)
2、将该命令放入
Active Object Engine(也就是放入一个队列,LinkedList)
3、从该Engine取出一个命令,执行,若该命令没有执行过,设为执行过,然后将自己加入队列尾部,若执行过,判断该命令执行需要的事件发生没有,未发生,再将自己加入队列尾部。事件发生了,将需要执行的命令加入队列尾部。
优点:
1:减弱了comsumer的复杂性,因为只有一个comsumer了
2:可以自己对命令设计一下优先级,对命令可以优先级调度
3:使用了Command Pattern,所以可以保存命令再执行
缺点:
只用一个线程在执行,如果其中一个命令很耗时,将影响其它命令的执行。
解决办法有两个:
1:可以使用调度算法,将按照耗时来排序,再加上排的越久,优先级越高;
2:在一个程序中,使用多个活动对象,也相当于有多个线程在执行了,在一定程度上能够解决效率的问题。
参考
http://flowercat.javaeye.com/blog/93665
http://blog.csdn.net/cn854/archive/2009/07/27/4385552.aspx