Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 生产者/消费者模式和观察者模式之间的差异_Java_Multithreading_Design Patterns - Fatal编程技术网

Java 生产者/消费者模式和观察者模式之间的差异

Java 生产者/消费者模式和观察者模式之间的差异,java,multithreading,design-patterns,Java,Multithreading,Design Patterns,我想了解观察者模式和生产者/消费者最常见的问题之间的区别,因为两者都需要同步,以便更改可用,我如何实现两者(如果它们不同)它们之间的区别是所需同步的性质 在观察者模式的情况下,每当观察对象发生兴趣变化时,立即通知所有观察者。因此,模式需要即时的每次更改同步。事实上,观察者模式并不需要不同的线程。正在更改观察对象的线程可以通知所有已注册的观察者 但是,对于生产者-消费者,唯一需要的同步是当没有元素时消费者必须等待,当缓冲区已满时生产者必须等待。但不需要每个对象同步。生产者可以在消费者消费任何对象之

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

它们之间的区别是所需同步的性质

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

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


至于实现,你可以看看维基百科的文章:和。

生产者-消费者问题可以被视为观察者模式的一个例子。

谢谢你的解释,我有一个问题:-是否可以在单个java程序中应用这两个概念?为什么不?现实世界中的应用程序非常庞大,它们可以在一个程序中应用几十个这样的概念。