code: protected TryableSemaphore getExecutionSemaphore() {
          if (properties.executionIsolationStrategy().get() == ExecutionIsolationStrategy.SEMAPHORE) {
              if (executionSemaphoreOverride == null) {
                  TryableSemaphore _s = executionSemaphorePerCircuit.get(commandKey.name());
                  if (_s == null) {
                      // we didn't find one cache so setup
                      executionSemaphorePerCircuit.putIfAbsent(commandKey.name(), new TryableSemaphoreActual(properties.executionIsolationSemaphoreMaxConcurrentRequests()));
                      // assign whatever got set (this or another thread)
                      return executionSemaphorePerCircuit.get(commandKey.name());
                  } else {
                      return _s;
                  }
              } else {
                  return executionSemaphoreOverride;
              }
          } else {
              // return NoOp implementation since we're not using SEMAPHORE isolation
              return TryableSemaphoreNoOp.DEFAULT;
          }
      }
docs: Get the TryableSemaphore this HystrixCommand should use for execution if not running in a separate thread.
  
  @return TryableSemaphore