code: public static InstrumentedExecutorService newFixedThreadPool(
              int nThreads, ThreadFactory threadFactory, MetricRegistry registry, String name) {
          return new InstrumentedExecutorService(Executors.newFixedThreadPool(nThreads, threadFactory), registry, name);
      }
docs: Creates an instrumented thread pool that reuses a fixed number of threads
  operating off a shared unbounded queue, using the provided
  ThreadFactory to create new threads when needed.  At any point,
  at most {@code nThreads} threads will be active processing
  tasks.  If additional tasks are submitted when all threads are
  active, they will wait in the queue until a thread is
  available.  If any thread terminates due to a failure during
  execution prior to shutdown, a new one will take its place if
  needed to execute subsequent tasks.  The threads in the pool will
  exist until it is explicitly {@link ExecutorService#shutdown shutdown}.
  
  @param nThreads      the number of threads in the pool
  @param threadFactory the factory to use when creating new threads
  @param registry      the {@link MetricRegistry} that will contain the metrics.
  @param name          the (metrics) name for this executor service, see {@link MetricRegistry#name(String, String...)}.
  @return the newly created thread pool
  @throws NullPointerException     if threadFactory is null
  @throws IllegalArgumentException if {@code nThreads <= 0}
  @see Executors#newFixedThreadPool(int, ThreadFactory)