code: private void prepareExecutionAttempt(AsyncExecutionContextImpl<W> executionContext) {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) {
              Tr.event(tc, "Execution {0} enqueuing new execution attempt", executionContext.getId());
          }
  
          AsyncAttemptContextImpl<W> attemptContext = new AsyncAttemptContextImpl<>(executionContext);
  
          TimeoutState timeout = FaultToleranceStateFactory.INSTANCE.createTimeoutState(executorService, timeoutPolicy, metricRecorder);
          attemptContext.setTimeoutState(timeout);
  
          if (!circuitBreaker.requestPermissionToExecute()) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) {
                  Tr.event(tc, "Execution {0} Circuit Breaker open, not executing", executionContext.getId());
              }
  
              MethodResult<W> result = MethodResult.failure(new CircuitBreakerOpenException());
              processEndOfAttempt(attemptContext, result);
              return;
          }
  
          attemptContext.setCircuitBreakerPermittedExecution(true);
  
          timeout.start();
  
          ExecutionReference ref = bulkhead.submit((reservation) -> runExecutionAttempt(attemptContext, reservation), getExceptionHandler(attemptContext));
  
          if (!ref.wasAccepted()) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) {
                  Tr.event(tc, "Execution {0} bulkhead rejected execution", executionContext.getId());
              }
  
              processEndOfAttempt(attemptContext, MethodResult.failure(new BulkheadException()));
              return;
          }
  
          timeout.setTimeoutCallback(handleExceptions(() -> timeout(attemptContext, ref), attemptContext, executionContext));
  
          // Update what we should do if the user cancels the execution
          executionContext.setCancelCallback((mayInterrupt) -> {
              ref.abort(mayInterrupt);
              processEndOfAttempt(attemptContext, MethodResult.failure(new CancellationException()));
          }
docs: Submit an execution attempt to be run
  <p>
  Submission is done through the bulkhead object which may either queue the execution or immediately submit it to the global execution service