Speaking of concurrency, why are some service lifecycle methods synchronized and others not?
NamingService is, CreateDestroyService is not.
Services can be started and stopped from any thread, and mutable state can be accessed from any thread. The ones with synchronized methods simply use it as a thread safety mechanism for their mutable state. CreateDestroyService and friends have no mutable state, thus there's no need for them to be synchronized.