code: public ThreadPoolExecutor getThreadPool(final HystrixThreadPoolKey threadPoolKey, HystrixProperty<Integer> corePoolSize, HystrixProperty<Integer> maximumPoolSize, HystrixProperty<Integer> keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) {
          final ThreadFactory threadFactory = getThreadFactory(threadPoolKey);
  
          final int dynamicCoreSize = corePoolSize.get();
          final int dynamicMaximumSize = maximumPoolSize.get();
  
          if (dynamicCoreSize > dynamicMaximumSize) {
              logger.error("Hystrix ThreadPool configuration at startup for : " + threadPoolKey.name() + " is trying to set coreSize = " +
                      dynamicCoreSize + " and maximumSize = " + dynamicMaximumSize + ".  Maximum size will be set to " +
                      dynamicCoreSize + ", the coreSize value, since it must be equal to or greater than the coreSize value");
              return new ThreadPoolExecutor(dynamicCoreSize, dynamicCoreSize, keepAliveTime.get(), unit, workQueue, threadFactory);
          } else {
              return new ThreadPoolExecutor(dynamicCoreSize, dynamicMaximumSize, keepAliveTime.get(), unit, workQueue, threadFactory);
          }
      }
docs: Factory method to provide {@link ThreadPoolExecutor} instances as desired.
  <p>
  Note that the corePoolSize, maximumPoolSize and keepAliveTime values will be dynamically set during runtime if their values change using the {@link ThreadPoolExecutor#setCorePoolSize},
  {@link ThreadPoolExecutor#setMaximumPoolSize} and {@link ThreadPoolExecutor#setKeepAliveTime} methods.
  <p>
  <b>Default Implementation</b>
  <p>
  Implementation using standard java.util.concurrent.ThreadPoolExecutor
  
  @param threadPoolKey
  {@link HystrixThreadPoolKey} representing the {@link HystrixThreadPool} that this {@link ThreadPoolExecutor} will be used for.
  @param corePoolSize
  Core number of threads requested via properties (or system default if no properties set).
  @param maximumPoolSize
  Max number of threads requested via properties (or system default if no properties set).
  @param keepAliveTime
  Keep-alive time for threads requested via properties (or system default if no properties set).
  @param unit
  {@link TimeUnit} corresponding with keepAliveTime
  @param workQueue
  {@code BlockingQueue<Runnable>} as provided by {@link #getBlockingQueue(int)}
  @return instance of {@link ThreadPoolExecutor}