java 中 Runnable 和 Callable 接口的区别
javaserver side programmingprogramming
Runnable 和 Callable 都是函数式接口。实现这些接口的类被设计为由另一个线程执行。
线程可以用 Ruunable 启动,启动新线程有两种方式:一种是通过子类化 Thread 类,另一种是实现 Runnable 接口。
Thread 类没有可调用的构造函数,因此我们应该使用 ExecutorService 类来执行线程。
Sr.不。 | 键 | Runnable | Callable |
---|---|---|---|
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; } }