rows NullPointerException if threadFactory is null
     */
    /*
     *【Finalizable线程池】，允许自行指定线程工厂
     *
     * 顺序执行普通任务，线程池中最多只有一个线程。
     *
     * 配置：
     * - 阻塞队列   : LinkedBlockingQueue
     * -【核心阙值】: 1
     * -【最大阙值】: 1
     */
    public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {
        return new FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(), threadFactory));
    }
    
    /*▲ 【线程池】 ████████████████████████████████████████████████████████████████████████████████┛ */
    
    
    
    /*▼ 任务对象 ████████████████████████████████████████████████████████████████████████████████┓ */
    
    /**
     * Returns a {@link Callable} object that, when
     * called, runs the given task and returns {@code null}.
     *
     * @param task the task to run
     *
     * @return a callable object
     *
     * @throws NullPointerException if task null
     */
    // 包装Runnable任务，无返回值
    public static Callable<Object> callable(Runnable task) {
        if(task == null) {
            throw new NullPointerException();
        }
        return new RunnableAdapter<Object>(task, null);
    }
    
    /**
     * Returns a {@link Callable} object that, when
     * called, runs the given task and returns the given result.  This
     * can be useful when applying methods requiring a
     * {@code Callable} to an otherwise resultless action.
     *
     * @param task   the task to run
     * @param result the result to return
     * @param <T>