Non ho letto e valutato bene tutto il tuo codice ma ... una cosa l'ho notata subito: forse non intendevi usare Observable/Observer di java.util (che è una possibile implementazione del pattern "Observer")
Il punto è che hai definito tuoi tipi chiamati Observable/Observer, che non centrano più nulla con quelli di java.util. Risulta quindi molto fumoso (oltre che quasi sicuramente errato). Inoltre vedo dei implements Runnable ma non vedo i run() (magari non li hai solo postati qui) ma in ogni caso un Observer che implementa di serie Runnable è quanto meno "strano" (dubbio, direi).

Devi rivedere tutto quanto. O usi Observable/Observer di java.util o la implementazione del pattern "Observer" la fai da zero tu. La implementazione in java.util non è il massimo come design per una serie di aspetti ma ovviamente va bene per certi scenari.