java.util.Observable
предъявляет много претензий к тому, что ожидается от разработчиков. Однако в качестве интерфейса ничего этого не применяется.
Контракт на notifyObservers(Object o)
составляет:
Если этот объект изменился, как указано методом hasChanged, уведомите всех его наблюдателей и затем вызовите метод clearChanged, чтобы указать, что этот объект больше не изменился.
У каждого наблюдателя есть свой метод обновления, вызываемый с двумя аргументами: этот наблюдаемый объект и аргумент arg.
Не ожидается, что этот метод будет синхронизирован. Это означает, что если вы вызываете notifyObservers(Object o)
в разных потоках, не следует ожидать синхронизации.
Что более важно для вашего вопроса, также нет соответствующего ожидания завершения java.util.Observer.update(Observable a, Object arg)
в одной теме. Это означает, что вы можете вызывать notifyObservers(Object o)
все, что вам нравится в одном потоке, но Observer.update(Observable a, Object arg)
может быть порождением потоков. Если это так, вы не можете гарантировать, когда завершится начатая работа.
Если вы пишете как Observers
, так и Observables
и не создаете потоки, вы можете быть уверены, что каждый вызов notifyObservers(Object o)
завершится только после завершения последнего вызова update(Observable o, Object arg)
.