code: public static HystrixThreadPoolMetrics getInstance(HystrixThreadPoolKey key, ThreadPoolExecutor threadPool, HystrixThreadPoolProperties properties) {
          // attempt to retrieve from cache first
          HystrixThreadPoolMetrics threadPoolMetrics = metrics.get(key.name());
          if (threadPoolMetrics != null) {
              return threadPoolMetrics;
          } else {
              synchronized (HystrixThreadPoolMetrics.class) {
                  HystrixThreadPoolMetrics existingMetrics = metrics.get(key.name());
                  if (existingMetrics != null) {
                      return existingMetrics;
                  } else {
                      HystrixThreadPoolMetrics newThreadPoolMetrics = new HystrixThreadPoolMetrics(key, threadPool, properties);
                      metrics.putIfAbsent(key.name(), newThreadPoolMetrics);
                      return newThreadPoolMetrics;
                  }
              }
          }
      }
docs: Get or create the {@link HystrixThreadPoolMetrics} instance for a given {@link HystrixThreadPoolKey}.
  <p>
  This is thread-safe and ensures only 1 {@link HystrixThreadPoolMetrics} per {@link HystrixThreadPoolKey}.
  
  @param key
  {@link HystrixThreadPoolKey} of {@link HystrixThreadPool} instance requesting the {@link HystrixThreadPoolMetrics}
  @param threadPool
  Pass-thru of ThreadPoolExecutor to {@link HystrixThreadPoolMetrics} instance on first time when constructed
  @param properties
  Pass-thru to {@link HystrixThreadPoolMetrics} instance on first time when constructed
  @return {@link HystrixThreadPoolMetrics}