So perhaps one solution is to let configure coreSize as well? core = maximum => fixedSize thread pool

    public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }

The timeout is irrevant when (core = maximum), since disabled timeout isn't 0L but max value.