public BlockingTaskExecutor build() {
        final ThreadFactory threadFactory = ThreadFactories.builder(threadNamePrefix)
                                                           .daemon(daemon)
                                                           .priority(priority)
                                                           .taskFunction(taskFunction)
                                                           .build();
        final ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(
                numThreads, threadFactory);
        if (keepAliveTimeMillis > 0) {
            scheduledThreadPoolExecutor.setKeepAliveTime(keepAliveTimeMillis, TimeUnit.MILLISECONDS);
            scheduledThreadPoolExecutor.allowCoreThreadTimeOut(true);
        }
        return new DefaultBlockingTaskExecutor(scheduledThreadPoolExecutor);
    }
Returns a newly-created {@link BlockingTaskExecutor} with the properties given so far.
core/src/main/java/com/linecorp/armeria/common/util/BlockingTaskExecutorBuilder.java