java - 生产者/消费者模式与观察者模式的区别

标签 java multithreading design-patterns

我想了解观察者模式与生产者/消费者最常见问题之间的区别,因为两者都需要同步以便更改可用,以及我如何实现两者(如果它们不同)

最佳答案

它们之间的区别在于所需同步的性质。

在观察者模式的情况下,只要对观察对象的兴趣发生变化,所有观察者都会立即得到通知。因此,模式要求每次更改立即同步。事实上观察者模式不需要不同的线程。正在改变被观察对象的线程可以通知所有注册的观察者。

然而,在生产者-消费者的情况下,唯一需要的同步是消费者必须在没有元素时等待,而生产者必须在缓冲区已满时等待。但是不需要每个对象同步。生产者可以在消费者消费任何对象之前生产多个对象,消费者可以一次消费多个对象。所以这里不需要像观察者这样的即时通知。

至于实现,你可以看看他们的维基百科文章:Observer PatternProducer-Consumer Problem .

关于java - 生产者/消费者模式与观察者模式的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40446118/

相关文章:

java - Class.getResource 和 ClassLoader.getSystemResource : is there a reason to prefer one to another?

multithreading - 在线程停止时关闭窗口

java - Java 生产者消费者多线程中的终止

使用 typedef 结构时的 C 设计风格

c# - 构建器模式 - 带前提条件的方法

java - 使用 htmlUnit 抓取 aspx 页面

java - 如何找出 Firestore 中事务失败的根本原因?

java - 调用方法时出错

c# - System.Threading.Timer 与 System.Threading.Thread.Sleep 解析 - .NET Timer 不使用系统时钟解析

design-patterns - 在 Rust 中,当您需要一个引用保持结构有时拥有其引用的数据时,该模式是什么?