加载中...
主动对象模式把方法的调用与执行解耦,调用者提交请求后立即返回,请求被排队并由对象自己的独立线程异步执行。它简化了并发编程,使对象内部串行处理请求,避免复杂的显式加锁。

| 中文名 | 主动对象模式 |
| 英文名 | Active Object |
| 类型 | 并发设计模式 |
| 核心机制 | 调用与执行分离 |
| 常见搭配 | Future、Proxy |
主动对象模式(Active Object)是一种并发设计模式,它将方法的调用与方法的实际执行分离。当客户端调用主动对象的方法时,该调用被封装为一个请求放入队列并立即返回;主动对象拥有自己的执行线程,按顺序从队列取出请求并异步执行。
主动对象模式属于并发模式的经典成员,常见于面向对象并发编程的模式著作中。它的目标是让访问对象状态的并发调用能够安全、有序地进行,而不需要调用方处理线程同步细节。由于所有请求都由对象自身的单一线程串行处理,对象的内部状态天然免于竞态,调用者则获得异步、非阻塞的调用体验。
主动对象适合需要并发访问共享资源又希望简化同步的场景,例如:GUI 中把耗时操作放到后台执行;设备或连接的串行化访问;并发任务的排队处理。它与 Future/Promise 模式常配合使用,以便调用方获取异步执行的结果。
问:主动对象和普通的线程池有什么区别?答:线程池是通用的任务执行设施;主动对象则针对特定对象封装一个串行执行的线程与请求队列,保证对该对象的调用有序执行且状态安全,并保留原有的方法调用语义。
问:主动对象有什么缺点?答:请求排队和线程切换带来额外开销与延迟,单一执行线程也可能成为吞吐瓶颈;此外异步语义会增加调试和错误处理的复杂度。

| 中文名 | 主动对象模式 |
| 英文名 | Active Object |
| 类型 | 并发设计模式 |
| 核心机制 | 调用与执行分离 |
| 常见搭配 | Future、Proxy |
登录 后参与讨论
暂无讨论,来发表第一条评论吧