code: static Executor renamingDecorator(final Executor executor, final Supplier<String> nameSupplier) {
      checkNotNull(executor);
      checkNotNull(nameSupplier);
      if (isAppEngine()) {
        // AppEngine doesn't support thread renaming, so don't even try
        return executor;
      }
      return new Executor() {
        @Override public void execute(Runnable command) {
          executor.execute(Callables.threadRenaming(command, nameSupplier));
        }
      };
    }
docs: Creates an {@link Executor} that renames the {@link Thread threads} that its tasks run in.
  
  <p>The names are retrieved from the {@code nameSupplier} on the thread that is being renamed
  right before each task is run.  The renaming is best effort, if a {@link SecurityManager}
  prevents the renaming then it will be skipped but the tasks will still execute.
  
  
  @param executor The executor to decorate
  @param nameSupplier The source of names for each task