一步步學習java併發程式設計模式之Active Object模式(一)什麼是active object

aitangyong發表於2014-03-13

       最近在閱讀世界級軟體開發大師Robert C. Martin的名著《敏捷軟體開發原則、模式與實踐》,在講述命令模式的時候,Bob大叔提到了命令模式的一個使用場景:Active Object。剛開始不知道這是什麼,看例子DelayedTyper的時候,也是雲裡霧裡不太理解。百度了一下後,才知道Active Object是併發程式設計一種常用的模式。看了 別人寫的部落格,也是半知半解,打算寫一系列關於該模式的部落格,記錄自己的學習過程和理解,與大家交流。

       Active Object模式其實就是future模式,JDK已經內建了對該模式的支援。該模式的核心是通過解耦方法的呼叫(invocation)和方法的執行(execution)來提高程式的併發度,方法呼叫發生在呼叫者執行緒上下文中,而方法的執行發生在獨立於呼叫者執行緒的 Active Object 執行緒上下文中。說白了,就是為了減少方法A呼叫方法B必須等待的時間。考慮如下程式碼片段:

 // 呼叫天氣服務,該方法耗時比較長
WeatherResult result = WeatherService.getWeatherInfo("廣東深圳", "2014-03-14");
 
// 1.列印使用者資訊
System.out.println("current user is:aty");
 
 // 2.列印留言資訊
System.out.println("concurrent is difficult but interesting.");
  
// 3.列印天氣資訊
System.out.println(result);

由於呼叫天氣計算服務花費的時間比較長,直接的方法呼叫(方法的呼叫和執行在同一個執行緒中執行),會導致當前執行緒阻塞,後續程式碼在計算結果返回之前不能執行。而實際上,列印使用者資訊和留言資訊,是不依賴於天氣計算的。因此普通的方法呼叫,會導致程式併發能力下降,響應時間增加。使用Active Object模式,就是為了解決這種阻塞問題,提高程式的併發度。

    以下2篇文章都是講述該模式的原理和實現的,雖然寫的很好,但是個人覺得有點抽象,程式碼也是基於C++的,剛開始學習比較難懂,需要花費較大的功夫才能掌握。剛好自己也在學習該併發模式,打算按照自己的理解,一步步寫這一系列的部落格。希望能加深自己的理解,也希望能幫助大家更好的理解Active Object模式,在討論和交流中進步。

http://www.ibm.com/developerworks/cn/java/j-lo-activeobject/ 

http://blog.csdn.net/rstevens/article/details/1784229

相關文章