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

Vor*_*t3x 9 java thread-safety observer-pattern

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

示例:我有多个线程,所有Observable,将经常调用notifyObservers(...).所有这些线程都报告给一个Observer对象.

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

Tho*_*mas 7

从源代码(我有Java 5源代码,但对于Java 6和7应该是相同的),似乎你只有自己的同步Observable.

从notifyObservers(...)方法(in Observable):

synchronized (this) {
  //the observers are notified in this block, with no additional synchronization
}
Run Code Online (Sandbox Code Playgroud)

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