一步步学习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必须等待的时间。考虑如下代码片段:
由于调用天气计算服务花费的时间比较长,直接的方法调用(方法的调用和执行在同一个线程中执行),会导致当前线程阻塞,后续代码在计算结果返回之前不能执行。而实际上,打印用户信息和留言信息,是不依赖于天气计算的。因此普通的方法调用,会导致程序并发能力下降,响应时间增加。使用Active Object模式,就是为了解决这种阻塞问题,提高程序的并发度。
以下2篇文章都是讲述该模式的原理和实现的,虽然写的很好,但是个人觉得有点抽象,代码也是基于C++的,刚开始学习比较难懂,需要花费较大的功夫才能掌握。刚好自己也在学习该并发模式,打算按照自己的理解,一步步写这一系列的博客。希望能加深自己的理解,也希望能帮助大家更好的理解Active Object模式,在讨论和交流中进步。
附
http://www.ibm.com/developerworks/cn/java/j-lo-activeobject/
http://blog.csdn.net/rstevens/article/details/1784229
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
相关文章推荐
- 一步步学习java并发编程模式之Active Object模式(三)java实现active object
- 一步步学习java并发编程模式之Active Object模式(四)改进后的java实现
- 一步步学习java并发编程模式之Active Object模式(五) 使用JDK的内置实现
- 一步步学习java并发编程模式之Active Object模式(二)java实现异步调用
- 主动对象(Active Object):用于并发编程的对象行为模式
- Active Object 并发模式在 Java 中的应用--转载
- 任务和主动对象(Active Object):并发编程模式
- 主动对象(Active Object):用于并发编程的对象行为模式
- 第5章 任务和主动对象(Active Object):并发编程模式
- java active object 并发模式
- 主动对象(Active Object):用于并发编程的对象行为模式
- JAVA并发设计模式学习笔记(一)—— JAVA多线程编程
- java并发编程学习12--并发数据结构简介
- JAVA基础 day25 网络编程 IP类 UDP,TCP传输学习 简易聊天工具 TCP并发学习
- Java并发学习--生产者/消费者模式
- 深入学习java并发编程:ThreadLocal<T>实现
- [javaSE] 看博客学习java并发编程
- java并发编程学习:用 Semaphore (信号量)控制并发资源