code: private static ThreadPoolExecutor build(ExecutorBuilder builder) {
  		final int corePoolSize = builder.corePoolSize;
  		final int maxPoolSize = builder.maxPoolSize;
  		final long keepAliveTime = builder.keepAliveTime;
  		final BlockingQueue<Runnable> workQueue;
  		if (null != builder.workQueue) {
  			workQueue = builder.workQueue;
  		} else {
  			// corePoolSize为0则要使用SynchronousQueue避免无限阻塞
  			workQueue = (corePoolSize <= 0) ? new SynchronousQueue<Runnable>() : new LinkedBlockingQueue<Runnable>();
  		}
  		final ThreadFactory threadFactory = (null != builder.threadFactory) ? builder.threadFactory : Executors.defaultThreadFactory();
  		RejectedExecutionHandler handler = ObjectUtil.defaultIfNull(builder.handler, new ThreadPoolExecutor.AbortPolicy());
  
  		final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(//
  				corePoolSize, //
  				maxPoolSize, //
  				keepAliveTime, TimeUnit.NANOSECONDS, //
  				workQueue, //
  				threadFactory, //
  				handler//
  		);
  		if (null != builder.allowCoreThreadTimeOut) {
  			threadPoolExecutor.allowCoreThreadTimeOut(builder.allowCoreThreadTimeOut);
  		}
  		return threadPoolExecutor;
  	}
docs: 构建ThreadPoolExecutor
  
  @param builder {@link ExecutorBuilder}
  @return {@link ThreadPoolExecutor}