Active是“主动”的意思,Active Object 是“主动对象”的意思,所谓主动对象就是指其拥有自己的独立线程,比如 Thread 实例就是一主动对象,不过 Active Object 设计模式不仅仅是拥有独立的线程,它还可以接受异步消息,并且能够返回处理的结果。
System.gc() 方法就是一个“接受异步消息的主动对象”,调用 gc 方法的线程和 gc 自身的执行线程并不是同一线程。下图为接受异步消息的主动对象的工作原理图。
Active Object 设计模式将一个接口的方法调用转换成可接受异步消息的主动对象,也就是方法的执行和方法的调用是在不同的线程中进行的,那么如何使得执行线程知道应该如何正确执行接口方法呢?我们需要将接口方法的参数以及具体实现封装成特定的 Message 告知执行线程。如果该接口需要返回值,则必须得设计成 Futrue 的返回形式,下图为Active Object 模式设计的结构类图。
当某个线程调用 OrderService 接口的 findOrderDetails 方法时,事实上是发送一个包含 findOrderDetails 方法参数以及 OrderService 具体实现的 Message 到 Message 队列,执行线程通过从队列中获取 Message 来调用具体的实现,接口方法的调用和接口方法的执行分别处于不同的线程中,因此称该接口为 Active Object。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/chengqiuming/article/details/124551997
内容来源于网络,如有侵权,请联系作者删除!