2011-09-23 12 views
9

En clases de patrones de observador de java Observador y observable, son las llamadas realizadas a de objetos observables notifyObservers (arg0 objeto), en diferentes hilos, hilo de seguridad?¿Es java.util.Observable thread-safe?

Ejemplo: tengo múltiples hilos, todos observables, que va a llamar a notifyObservers (...) siempre tan a menudo. Todos estos hilos informan a un solo objeto Observer.

¿Encontraré problemas de simultaneidad y cuál sería una mejor manera de resolver esto? Estoy al tanto de una posible solución al usar oyentes de eventos. Sin embargo, no estoy seguro de cómo implementarlo y, además, me gustaría seguir con la implementación del patrón Observer, si es posible.

+0

http://stackoverflow.com/questions/5123121/is-java-util-observable-in-android-thread-safe – Mob

+0

Gracias, no he visto eso, sin embargo, no parece responder a esta pregunta, ni dar ninguna pista sobre cómo averiguarlo. Esto es para la implementación Java normal. – Vort3x

+0

Intente descompilar el objeto observable en la distribución java que está utilizando. – DwB

Respuesta

7

Desde el código fuente (tengo el origen de Java 5, pero debería ser el mismo para Java 6 y 7), parece que solo tiene sincronización en el Observable.

A partir del método notifyObservers(...) (en Observable):

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

Así, si el Observer no cambia los datos compartidos que debería estar bien. Si lo hace, puede tener varias llamadas a update(Observable, Object) con diferentes Observable s; deberá agregar usted mismo la sincronización a esos datos compartidos.

Cuestiones relacionadas