code: protected Runnable wrapTask(Runnable task) {
      // Preserve the MDC context of the caller thread.
      Map contextMap = MDC.getCopyOfContextMap();
      if (contextMap != null) {
        return new MDCRunnableAdapter(task, contextMap);
      }
      return task;
    }
docs: Override this to customize how the background task is created.
  
  @param task the task to be run in the background
  @return the runnable of the wrapped task