Java里 Callable Runnable区别
Runnable
Runnable 是 Java 中的一个接口,它代表一个可以由线程执行的任务。实现 Runnable 接口的类需要重写 run() 方法,该方法定义了任务的具体操作。Runnable 主要用于实现多线程,当一个类实现了 Runnable 接口,你就可以通过 Thread 类或者 ExecutorService 创建线程来执行这个任务。它不直接返回结果,也不抛出受检查异常。
示例代码:
public class MyTask implements Runnable {
@Override
public void run() {
System.out.println("Task is running in a separate thread.");
}
}
Callable
Callable 是 Java 5 引入的一个接口,与 Runnable 相似,它也代表一个可执行的任务,但提供了更强大的功能。与 Runnable 不同,Callable 提供了 call() 方法,此方法可以有返回值(通过泛型指定返回类型),并且可以抛出 checked exceptions。这使得 Callable 更适合用于需要返回结果或可能抛出异常的任务。
要执行 Callable 任务,通常需要将它们封装到 FutureTask 中,然后可以像普通 Runnable 一样提交给 ExecutorService 执行,或者直接作为 Thread 的目标。FutureTask 还提供了获取计算结果和取消执行的方法。
示例代码:
public class MyCallableTask implements Callable<Integer> {
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 0; i < 100; i++) {
sum += i;
}
return sum;
}
}
总结:
Runnable 用于不需要返回结果和不抛出检查异常的简单线程任务。
Callable 则适用于需要返回结果或可能抛出检查异常的更复杂的任务,并且通过 Future 接口支持结果的获取和任务的管理。
参与讨论
(Participate in the discussion)
参与讨论