code: @Override
      public void stop(StopContext context) {
          Runnable asyncStop = () -> {
              synchronized (stopLock) {
                  controlledProcessStateServiceSupplier.get().removePropertyChangeListener(propertyChangeListener);
                  SuspendController controller = suspendControllerSupplier != null ? suspendControllerSupplier.get() : null;
                  if (controller != null) {
                      controller.removeListener(operationListener);
                  }
                  runningState = null;
                  try {
                      listener.cleanup();
                  } catch (RuntimeException t) {
                      CoreManagementLogger.ROOT_LOGGER.processStateCleanupError(t, name);
                  } finally {
                      context.complete();
                  }
              }
          };
          final ExecutorService executorService = executorServiceSupplier.get();
          try {
              try {
                  executorService.execute(asyncStop);
              } catch (RejectedExecutionException e) {
                  asyncStop.run();
              }
          } finally {
              context.asynchronous();
          }
      }
docs: The stop is asynchronous and will wait until the current transition / suspendTransition ends before effectively stopping.
  This will force the executorService to be Value
  @param context the stop context.