java.util.concurrent.Callable<V>

Callable与Runnable的区别
本文介绍了Java并发编程中Callable与Runnable接口的区别。Callable是一种可执行逻辑并能返回结果的接口,而Runnable则不提供返回值。文章还探讨了两者的设计选择及其与Thread类的关系。

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

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


转载于:https://my.oschina.net/readjava/blog/282215

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值