 execute} will reuse previously constructed
     * threads if available. If no existing thread is available, a new
     * thread will be created and added to the pool. Threads that have
     * not been used for sixty seconds are terminated and removed from
     * the cache. Thus, a pool that remains idle for long enough will
     * not consume any resources. Note that pools with similar
     * properties but different details (for example, timeout parameters)
     * may be created using {@link ThreadPoolExecutor} constructors.
     *
     * @return the newly created thread pool
     */
    /*
     *【缓冲线程池】
     *
     * 提交新任务之后，会创建一个新线程执行它，该新线程在空闲期的存活时长为60秒。
     * 换句话说，每个线程在空闲60秒之后就被销毁了，所以适合做缓冲(不是缓存)。
     *
     * 配置：
     * - 阻塞队列   : SynchronousQueue
     * -【核心阙值】: 0
     * -【最大阙值】: 无限
     */
    public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());
    }
    
    /**
     * Creates a thread pool that creates new threads as needed, but
     * will reuse previously constructed threads when they are
     * available, and uses the provided
     * ThreadFactory to create new threads when needed.
     *
     * @param threadFactory the factory to use when creating new threads
     *
     * @return the newly created thread pool
     *
     * @throws NullPointerException if threadFactory is null
     */
    /*
     *【缓冲线程池】，允许自行指定线程工厂
     *
     * 提交新任务之后，会创建一个新线程执行它，该新线程在空闲期的存活时长为60秒。
     * 换句话说，每个线程在空闲60秒之后就被销毁了，所以适合做缓冲(不是缓存)。
     *
     * 配置：
     * - 阻塞队列   : SynchronousQueue
     * -【核心阙值】: 0
     * -【�