Callable也是concurrent里面比较简单的一个接口,但通常简单的东西,都是非常抽象的。也是非常不太好理解的。那么这个Callable和Runnable又有什么区别呢?
上源代码:
package java.util.concurrent;
public interface Callable<V> {
/**
* Computes a result, or throws an exception if unable to do so.
*
* @return computed result
* @throws Exception if unable to compute a result
*/
V call() throws Exception;
}
V call() throws Exception;
V call() throws Exception;
返回:范型V
异常:各种异常
其实答案早就在作者的注释里说得非常得清楚了,Callable和Runnable都是一段可执行的逻辑。但是callable是带返回结果的,而Runnable是没有的。
如果你去看Runnable的源代码,会发现Callable其实是对Runnable的增强。 但为什么Callable不用继承的方式去扩展Runnable呢?我想这个跟之前Thread的实现有关系,因为Thread的执行方法是start(),也是无法返回的。
如果Callable去继承Runnable,那么要使Thread可以发挥Callable的带返回结果的方法,无论是侵入Thread的实现,还是重新写一个类继承Thread类(四者的关系会非常复杂),似乎都不太好。
所以没有使用继承的方式去扩展