java.util.concurrent.Callable<V>

原创
2014/06/20 00:15
阅读数 1.2K

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类(四者的关系会非常复杂),似乎都不太好。

所以没有使用继承的方式去扩展


展开阅读全文
加载中
点击加入讨论🔥(1) 发布并加入讨论🔥
打赏
1 评论
0 收藏
1
分享
返回顶部
顶部