Java常见面试题—Callable与Runnable接口

本文对比了Runnable与Callable两个接口的主要区别,包括返回值、异常处理等方面,并介绍了它们如何与线程结合使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Runnable

Runnable应该是比较熟悉的接口,它只有一个run()函数,用于将耗时操作写在其中,该函数没有返回值,不能将结果返回给客户程序。然后使用某个线程去执行runnable即可实现多线程,Thread类在调用start()函数后就是执行的是Runnable的run()函数。Runnable的声明如下 :

public interface Runnable {  
    /** 
     * When an object implementing interface <code>Runnable</code> is used 
     * to create a thread, starting the thread causes the object's 
     * <code>run</code> method to be called in that separately executing 
     * thread. 
     * <p> 
     * 
     * @see     java.lang.Thread#run() 
     */  
    public abstract void run();  
}  

Callable

Callable与Runnable的功能大致相似,Callable中有一个call()函数,但是call()函数有返回值。Callable的声明如下 :

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;  
}  

可以看到,这是一个泛型接口,call()函数返回的类型就是客户程序传递进来的V类型。
不同之处:
1.Callable可以返回一个类型V,而Runnable不可以;
2.Callable能够抛出checked exception,而Runnable不可以;
3.Runnable是自从java1.1就有了,而Callable是1.5之后才加上去的;
4.Callable和Runnable都可以应用于executors。而Thread类只支持Runnable;
Callable与executors联合在一起,在任务完成时可立刻获得一个更新了的Future;而Runable却要自己处理。
上面只是简单的不同,其实这两个接口在用起来差别还是很大的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值