code: public static DebuggableThreadPoolExecutor createWithMaximumPoolSize(String threadPoolName, int size, int keepAliveTime, TimeUnit unit)
      {
          return new DebuggableThreadPoolExecutor(size, Integer.MAX_VALUE, keepAliveTime, unit, new LinkedBlockingQueue<Runnable>(), new NamedThreadFactory(threadPoolName));
      }
docs: Returns a ThreadPoolExecutor with a fixed maximum number of threads, but whose
  threads are terminated when idle for too long.
  When all threads are actively executing tasks, new tasks are queued.
  @param threadPoolName the name of the threads created by this executor
  @param size the maximum number of threads for this executor
  @param keepAliveTime the time an idle thread is kept alive before being terminated
  @param unit tht time unit for {@code keepAliveTime}
  @return the new DebuggableThreadPoolExecutor