Active Object 模式是Command模式的一種,是實(shí)現(xiàn)多線程控制的一項(xiàng)古老技術(shù) .
在《敏捷軟件開發(fā)》這本書中描述的算法如下:
1、構(gòu)造一個(gè)命令。(實(shí)現(xiàn)Command模式的一個(gè)命令)
2、將該命令放入
Active Object Engine(也就是放入一個(gè)隊(duì)列,LinkedList)
3、從該Engine取出一個(gè)命令,執(zhí)行,若該命令沒有執(zhí)行過(guò),設(shè)為執(zhí)行過(guò),然后將自己加入隊(duì)列尾部,若執(zhí)行過(guò),判斷該命令執(zhí)行需要的事件發(fā)生沒有,未發(fā)生,再將自己加入隊(duì)列尾部。事件發(fā)生了,將需要執(zhí)行的命令加入隊(duì)列尾部。
優(yōu)點(diǎn):
1:減弱了comsumer的復(fù)雜性,因?yàn)橹挥幸粋€(gè)comsumer了
2:可以自己對(duì)命令設(shè)計(jì)一下優(yōu)先級(jí),對(duì)命令可以優(yōu)先級(jí)調(diào)度
3:使用了Command Pattern,所以可以保存命令再執(zhí)行
缺點(diǎn):
只用一個(gè)線程在執(zhí)行,如果其中一個(gè)命令很耗時(shí),將影響其它命令的執(zhí)行。
解決辦法有兩個(gè):
1:可以使用調(diào)度算法,將按照耗時(shí)來(lái)排序,再加上排的越久,優(yōu)先級(jí)越高;
2:在一個(gè)程序中,使用多個(gè)活動(dòng)對(duì)象,也相當(dāng)于有多個(gè)線程在執(zhí)行了,在一定程度上能夠解決效率的問(wèn)題。
參考
http://flowercat.javaeye.com/blog/93665
http://blog.csdn.net/cn854/archive/2009/07/27/4385552.aspx