class ExecutorPool {

    public static ThreadFactory newThreadFactory(String namePrefix) {
        HgAssert.isArgumentNotNull(namePrefix, "namePrefix");
        return new DefaultThreadFactory(namePrefix);
    }

    public static ThreadPoolExecutor createExecutor(String name, long keepAliveTime,
                                                    int coreThreads, int maxThreads) {<FILL_FUNCTION_BODY>}

    public static class DefaultThreadFactory implements ThreadFactory {

        private final AtomicInteger threadNumber = new AtomicInteger(1);
        private final String namePrefix;

        public DefaultThreadFactory(String threadNamePrefix) {
            this.namePrefix = threadNamePrefix + "-";
        }

        @Override
        public Thread newThread(Runnable r) {
            Thread t = new Thread(null, r, namePrefix + threadNumber.getAndIncrement(), 0);
            t.setDaemon(true);
            t.setPriority(Thread.NORM_PRIORITY);
            return t;
        }
    }
}

        return new ThreadPoolExecutor(coreThreads, maxThreads, keepAliveTime, TimeUnit.SECONDS,
                                      new SynchronousQueue<>(),
                                      newThreadFactory(name),
                                      new ThreadPoolExecutor.CallerRunsPolicy()
        );
    
<no_super_class>