Java多線程設計模式(6)

來源:互聯網
上載者:User

==========================Active Object Pattern========================================

Active Object 模式是Command模式的一種,是實現多線程式控制制的一項古老技術 .
在《敏捷式軟體開發 (Agile Software Development)》這本書中描述的演算法如下:
1、構造一個命令。(實現Command模式的一個命令)
2、將該命令放入Active Object Engine(也就是放入一個隊列,LinkedList)
3、從該Engine取出一個命令,執行,若該命令沒有執行過,設為執行過,然後將自己排入佇列尾部,若執行過,判斷該命令執行需要的事件發生沒有,未發生,再將自己排入佇列尾部。事件發生了,將需要執行的命令排入佇列尾部。

那麼到底什麼是主動對象呢?傳統上,所有的對象都是被動的程式碼片段,對象中的代碼是在對它發出方法調用的線程中執行的。也就是,調用線程(calling threads)被“借出”,以執行被動對象的方法。

而主動對象卻不一樣。這些對象持有它們自己的線程(甚或多個線程),並將這個線程用於執行對它們的任何方法的調用。因而,如果你想象一個傳統對象,在裡面封裝了一個線程(或多個線程),你就得到了一個主動對象。

例如,設想對象“A”已在你的程式的main()函數中被執行個體化。當你的程式啟動時,OS建立一個線程,以從main()函數開始執行。如果你調用對象A的任何方法,該線程將“流過”那個方法,並執行其中的代碼。一旦執行完成,該線程返回調用該方法的點並繼續它的執行。但是,如果”A”是主動對象,事情就不是這樣了。在這種情況下,主線程不會被主動對象借用。相反,當”A”的方法被調用時,方法的執行發生在主動對象持有的線程中。另一種思考方法:如果調用的是被動對象的方法(常規對象),調用會阻塞(同步的);而另一方面,如果調用的是主動對象的方法,調用不會阻塞(非同步)。

此設計模式也比較複雜,可參見ACE的中文文檔裡面的一篇文章:主動對象(Active Object):用於並發編程的對象行為模式 (http://www.kuqin.com/ace-2002-12/Part-One/Chapter-6.htm)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.