code: public final CompletionStage<Void> runAsync(Runnable runnable, Executor executor) {
          Objects.requireNonNull(runnable, "runnable must not be null");
          return completedStage(null).thenRunAsync(runnable, executor);
      }
docs: Returns a new CompletionStage that is asynchronously completed
  by a task running in the given executor after it runs the given
  action. Subsequent completion stages will
  use defaultAsyncExecutor as their default executor.
  
  @param runnable the action to run before completing the
  returned CompletionStage
  @param executor the executor to use for asynchronous execution
  @return the new CompletionStage