java 中 Runnable 和 Callable 接口的区别

javaserver side programmingprogramming

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

线程可以用 Ruunable 启动,启动新线程有两种方式:一种是通过子类化 Thread 类,另一种是实现 Runnable 接口。

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

Sr.不。RunnableCallable
1

它属于 Java.lang
它属于 java.util.concurrent
2
线程创建
我们可以通过传递 runnable 作为参数来创建线程。
我们无法通过将可调用函数作为参数传递来创建线程 
3
返回类型
Ruunable 不返回任何内容
Callable 可以返回结果
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;
   }
}

相关文章