Java中Runnable和Callable接口之间的区别

Runnable和Callable都是函数接口。实现这些接口的类被设计成由另一个线程执行。

可以使用Runable启动线程,这是启动新线程的两种方法:一种是通过子类化Thread类,另一种是实现Runnable接口。

线程类没有可调用的构造函数,因此我们应使用ExecutorService类来执行线程。

序号RunnableCallable
1

它属于 Java.lang

它属于java.util.concurrent
2
线程创建

我们可以通过传递runnable作为参数来创建线程。

我们不能通过传递callable作为参数来创建线程  
3
返回类型

Ruunable不返回任何内容

可调用可返回结果
4。
方法

它有 run ()方法

它具有call()方法
5
批量执行
不能用于批量执行任务通过调用invokeAll(),可将其用于批量执行任务。

Runnable示例

public class RunnableExample implements Runnable {
   public void run() {
      System.out.println("Hello from a Runnable!");
   }
   public static void main(String args[]) {
      (new Thread(new RunnableExample())).start();
   }
}

Callable的例子

public class Main {
   public static void main(String args[]) throws InterruptedException, ExecutionException {
      ExecutorService services = Executors.newSingleThreadExecutor();
      Future<?> future = services.submit(new Task());
      System.out.println("In Future Object" + future.get());
   }
}
import java.util.concurrent.Callable;

public class Task implements Callable {

   @Override
   public String call() throws Exception {
      System.out.println("In call");
      String name = "test";
      return name;
   }
}