【问题标题】:Is java.util.Observable thread-safe?java.util.Observable 是线程安全的吗?
【发布时间】:2011-09-23 13:55:45
【问题描述】:

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

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

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

【问题讨论】:

  • 谢谢,我没有看到,但是它似乎没有回答这个问题,也没有给出任何提示如何找出答案。这是针对普通 Java 实现的。
  • 尝试反编译您正在使用的 java 发行版中的 Observable 对象。
  • @Angel ;我确实这样做了,没有提到同步或线程安全。
  • 好吧,如果方法不是“同步”的,应该显示在 java doc 中,它就不能是真正的线程安全的。

标签: java thread-safety observer-pattern


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-12
    • 2015-04-18
    • 2011-10-07
    • 2012-03-02
    • 2011-10-28
    • 2023-03-14
    • 2016-08-24
    • 2011-08-16
    相关资源
    最近更新 更多