abstract the thread monitoring into its own observer class