java.util.Observable 是线程安全的吗?

发布于 2024-12-06 16:34:04 字数 311 浏览 0 评论 0原文

在java的观察者模式类ObserverObservable中,在不同的线程中调用Observable对象的notifyObservers(Object arg0),线程安全吗?

例子: 我有多个线程,所有Observables,它们都会经常调用notifyObservers(...)。所有这些线程都向单个观察者对象报告。

我会遇到并发问题吗?解决这个问题的更好方法是什么? 我知道使用事件侦听器的可能解决方案。但是我不确定如何实现它,而且如果可能的话,我想坚持使用观察者模式实现。

In java's Observer pattern classes Observer and Observable, are calls made to Observable objects's notifyObservers(Object arg0), in different threads, thread-safe?

Example:
I have multiple threads, all Observables, that will be calling notifyObservers(...) ever so often. All these threads report to a single Observer object.

Will I encounter concurrency issues, and what would be a better way to solve this?
I am aware of a possible solution using event listeners. However I am unsure how to implement it and also, I would like to stick with the Observer pattern implementation, if possible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

九局 2024-12-13 16:34:04

从源代码(我有 Java 5 源代码,但 Java 6 和 7 应该是相同的)来看,您似乎只在 Observable 本身上进行了同步。

来自 notifyObservers(...) 方法(在 Observable 中):

synchronized (this) {
  //the observers are notified in this block, with no additional synchronization
}

因此,如果 Observer 不更改任何共享数据,那么应该没问题。如果确实如此 - 您可能会使用不同的 Observable 多次调用 update(Observable, Object) - 您需要自己在共享数据上添加同步。

From the source code (I have Java 5 source, but it should be the same for Java 6 and 7) it seems like you only have synchronization on the Observable itself.

From the notifyObservers(...) method (in Observable):

synchronized (this) {
  //the observers are notified in this block, with no additional synchronization
}

Thus if the Observer doesn't change any shared data it should be fine. If it does - you could have multiple calls to update(Observable, Object) with different Observables - you'd need to add synchronization on that shared data yourself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文