code: public static ExecutorService contextAwareExecutor(ExecutorService original) {
          return (ExecutorService) Proxy.newProxyInstance(CLASS_LOADER, INTERFACES, new ExecutorServiceHandler(original));
      }
docs: creates a context-aware proxy of the given ExecutorService. All calls to the resulting proxy are directly
  forwarded to the original after wrapping all {@link Runnable} and {@link Callable} in their context-aware
  counter-parts.
  
  All submitted tasks to the resulting ExecutorService are guaranteed to run in the same context as the method on
  the ExecutorService was called. When doing this:
  
  <pre>
  ExecutorService pool = ThreadlocalUtil.contextAwareExecutor(Executors.newCachedThreadPool());
  ContextHolder.get().setCurrentContextId(&quot;42&quot;);
  pool.submit(command);
  </pre>
  
  You can assume that the command is executed in a thread where the contextid is set to "42".