package java.util.concurrent;
/**
* 返回结果并可能引发异常的任务。
* 实现者定义了一个没有参数的方法,称为call。
*
* <p>可调用接口类似于java.lang.Runnable,
* 这两个类的实例都可能由另一个线程执行。
* 然而,Runnable不返回结果,也不能抛出检查异常。
*
* <p>Executors类包含实用方法,可以将其他常用形式转换成Callable的类。
*
* 与Runnable相比,Callable接口有些不同之处:
*
* Runnable接口没有返回值,Callable接口有返回值。
* 又因为是返回值是泛型,所以任何类型的返回值都支持。
*
* Runnable接口的run方法没有throws Exception。
* 这意味着,Runnable不能抛出异常
* (子类不能抛出比父类更多的异常,但现在Runnable的run方法本身没有抛出任何异常);
* Callable接口可以抛出异常。
*
* 但注意,Thread并没有一个构造器可以接受Callable参数的,而且Thread也没有一个Callable类型成员的。
*
* public Thread(Runnable target) {
* init(null, target, "Thread-" + nextThreadNum(), 0);
* }
* 看来要想使用Callable还得依靠别的东西。
*
*
* @see Executor
* @since 1.5
* @author Doug Lea
* @param <V> the result type of method {@code call}
*/
@FunctionalInterface
public interface Callable<V> {
/**
* 计算结果,如果无法这样做,则抛出异常。
*
* @return computed result
* @throws Exception if unable to compute a result
*/
V call() throws Exception;
}