 of threads to keep in the pool,
     *                      even if they are idle
     * @param threadFactory the factory to use when the executor
     *                      creates a new thread
     *
     * @return the newly created scheduled thread pool
     *
     * @throws IllegalArgumentException if {@code corePoolSize < 0}
     * @throws NullPointerException     if threadFactory is null
     */
    /*
     *【定时任务线程池】，允许自行指定线程工厂
     *
     * 用于执行一次性或周期性的定时任务
     *
     * 配置：
     * - 阻塞队列   : DelayedWorkQueue
     * -【核心阙值】: corePoolSize
     * -【最大阙值】: 无限
     */
    public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory) {
        return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);
    }
    
    
    /**
     * Creates a single-threaded executor that can schedule commands
     * to run after a given delay, or to execute periodically.
     * (Note however that if this single
     * thread terminates due to a failure during execution prior to
     * shutdown, a new one will take its place if needed to execute
     * subsequent tasks.)  Tasks are guaranteed to execute
     * sequentially, and no more than one task will be active at any
     * given time. Unlike the otherwise equivalent
     * {@code newScheduledThreadPool(1)} the returned executor is
     * guaranteed not to be reconfigurable to use additional threads.
     *
     * @return the newly created scheduled executor
     */
    /*
     *【定时任务线程池代理】
     *
     * 用于执行一次性或周期性的定时任务，线程池中只有一个常驻线程。
     *
     * 配置：
     * - 阻塞队列   : DelayedWorkQueue
     * -【核心阙值】: 1
     * -【最大阙值】: 无限
     */
    public static ScheduledExecutorService newSingleThreadScheduledExecutor() {
        return new DelegatedScheduledExecutorService(new ScheduledThreadPo