Runnable和Callable的区别
相同点
1、两者都可用来编写多线程程序;
2、两者都需要调用Thread.start()启动线程;
不同点
1、两者最大的不同点是:实现Callable接口的任务线程能返回执行结果;而实现Runnable接口的任务线程不能返回结果;
2、Callable接口的call()方法允许抛出异常;而Runnable接口的run()方法的异常只能在内部消化,不能继续上抛;
Runnable
1.Runnable接口是一个功能接口,并且具有单一的run()不接受任何参数,并且不返回任何值的方法。
2.这适用于我们不查找线程执行结果的情况,例如,传入事件日志记录
由于方法签名没有指定“throws”子句, 因此无法传播进一步异常的检查
Callable
1.Callable接口是包含单一的通用call()调用方法-它返回一个通用值V
2.Callable的call()方法包含“throws Exception”子句,因此我们可以轻松地进一步传播已检查的异常
相同点
都是接口
都可以编写多线程程序
都采用Thread.start()启动线程
主要区别
Runnable 接口 run 方法无返回值;Callable 接口 call 方法有返回值,是个泛型,和Future、FutureTask配合可以用来获取异步执行的结果
Runnable 接口 run 方法只能抛出运行时异常,且无法捕获处理;Callable 接口 call 方法允许抛出异常,可以获取异常信息
注:Callalbe接口支持返回执行结果,需要调用FutureTask.get()得到,此方法会阻塞主进程的继续往下执行,如果不调用不会阻塞。
收起