您的位置:首页 > 移动开发 > Objective-C

一步步学习java并发编程模式之Active Object模式(一)什么是active object

2014-03-13 21:50 417 查看
最近在阅读世界级软件开发大师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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: