lying task
     * @param <T>      the type of the callable's result
     *
     * @return a callable object
     *
     * @throws NullPointerException   if callable null
     * @throws AccessControlException if the current access control
     *                                context does not have permission to both set and get context
     *                                class loader
     */
    // 包装Callable任务，使用上下文访问权限控制器和当前线程的类加载器
    public static <T> Callable<T> privilegedCallableUsingCurrentClassLoader(Callable<T> callable) {
        if(callable == null) {
            throw new NullPointerException();
        }
        return new PrivilegedCallableUsingCurrentClassLoader<T>(callable);
    }
    
    /**
     * Returns a {@link Callable} object that, when
     * called, runs the given privileged action and returns its result.
     *
     * @param action the privileged action to run
     *
     * @return a callable object
     *
     * @throws NullPointerException if action null
     */
    // 包装PrivilegedAction任务
    public static Callable<Object> callable(final PrivilegedAction<?> action) {
        if(action == null) {
            throw new NullPointerException();
        }
        
        return new Callable<Object>() {
            public Object call() {
                return action.run();
            }
        };
    }
    
    /**
     * Returns a {@link Callable} object that, when
     * called, runs the given privileged exception action and returns
     * its result.
     *
     * @param action the privileged exception action to run
     *
     * @return a callable object
     *
     * @throws NullPointerException if action null
     */
    // 包装PrivilegedExceptionAction任务
    public static Callable<Object> callable(final PrivilegedExceptionAction<?> action) {
        if(action == null) {
            throw new NullPointerException();
        }
        
        return new Callable<Object>() {
            public Object call() throws