Callable 与 Runnable:多线程编程中的两大接口对比
- 1、主要区别
- 1.1 返回值
- 1.2 使用方式
- 2、适用场景
- 3、示例
💖The Begin💖点点关注,收藏不迷路💖
|
在Java多线程编程中,Callable
和Runnable
是两个核心接口,它们在功能上各有侧重:
1、主要区别
1.1 返回值
-
Runnable:
run()
方法执行线程任务,但不返回任何结果。
-
Callable:
call()
方法执行线程任务,并返回一个结果。此外,它还可以声明并抛出异常。
1.2 使用方式
-
Runnable:
- 通常与
Thread
类结合使用,通过Thread
的构造函数传递Runnable
实例来创建线程。
- 通常与
-
Callable:
- 常与
Future
、FutureTask
结合使用,用于异步执行计算任务并获取结果。
- 常与
2、适用场景
- 当你的线程任务不需要返回任何结果时,使用
Runnable
。 - 当你的线程任务需要返回结果或需要处理异常时,使用
Callable
。
3、示例
Runnable 示例:简单线程任务,无需返回值。
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Running in thread: " + Thread.currentThread().getName());
}
public static void main(String[] args) {
Thread thread = new Thread(new MyRunnable());
thread.start();
}
}
Callable 示例:异步计算任务,需要返回结果。
import java.util.concurrent.*;
public class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
return "Result of the callable task";
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask<String> futureTask = new FutureTask<>(new MyCallable());
new Thread(futureTask).start();
// 获取并打印结果
System.out.println(futureTask.get());
}
}
选择哪个接口取决于你的具体需求,即是否需要返回值或处理异常。
💖The End💖点点关注,收藏不迷路💖
|