code: public synchronized ScheduledExecutorService getScheduler(final String purpose, boolean needDedicatedThread) {
          return needDedicatedThread ? new ManagedScheduledExecutorService(1, purpose, false) : sharedScheduler;
      }
docs: /*
  @param owner    Object which will be using the scheduler (and shutting it down when the object is disposed)
  
  @param purpose  short description of the purpose of the scheduler, will be set as the thread name
  if a dedicated thread is used
  
  @param needDedicatedThread set this to true to guarantee the scheduler will have its own dedicated thread.
  This is appropriate if the tasks that will be scheduled may take significant time,
  e.g. sending periodic keep alive messages to all sessions
  @return