Java中Runnable和Callable接口的区别

在设计Java中的并发线程时使用Runnable和Callable接口有什么区别,为什么你会选择一个呢?


在这里看到解释。

Callable接口类似于Runnable,因为它们都是为其实例可能由另一个线程执行的类设计的。 但是,Runnable不会返回结果,也不会抛出检查的异常。


RunnableCallable的应用程序有什么区别? 仅与Callable的返回参数有所不同?

基本上,是的。 看到这个问题的答案。 还有Callable的javadoc。

如果Callable可以完成Runnable所做的所有工作,那么两者都需要什么?

因为Runnable接口不能完成Callable所做的一切!

自Java 1.0以来, Runnable就一直存在,但Callable仅在Java 1.5中引入...来处理Runnable不支持的用例。 理论上,Java团队可能已经改变了Runnable.run()方法的签名,但是这会破坏1.5之前的代码的二进制兼容性,在将旧的Java代码迁移到较新的JVM时需要重新编码。 这是一个很大的否。 Java努力向后兼容...这是Java商业计算最大的卖点之一。

而且,显然,有些用例不需要返回结果或抛出检查的异常。 对于这些用例,使用Runnable比使用Callable<Void>更简洁,并从call()方法返回一个虚拟( null )值。


  • Callable需要实现call()方法,而Runnable需要实现run()方法。
  • Callable可以返回一个值,但Runnable不能。
  • Callable可以抛出检查异常,但Runnable不能。
  • Callable可以与ExecutorService#invokeXXX(Collection<? extends Callable<T>> tasks)方法一起使用,但Runnable不能。

    public interface Runnable {
        void run();
    }
    
    public interface Callable<V> {
        V call() throws Exception;
    }
    
  • 链接地址: http://www.djcxy.com/p/16381.html

    上一篇: The difference between the Runnable and Callable interfaces in Java

    下一篇: How to implement simple threading with a fixed number of worker threads