在 Java 中,Callable
接口是一种类似于 Runnable
的接口,但它可以返回结果,并且能够抛出异常。Callable
接口常用于并发编程,特别是在使用 ExecutorService
执行异步任务时。
下面是一个简单的示例,展示了如何创建和使用 Callable
接口:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class CallableExample {
public static void main(String[] args) {
// 创建一个执行服务
ExecutorService executorService = Executors.newSingleThreadExecutor();
// 创建一个Callable对象
Callable<String> callableTask = () -> {
// 模拟一些计算
Thread.sleep(2000);
return "任务完成";
};
// 提交任务并获取Future对象
Future<String> future = executorService.submit(callableTask);
// 执行其他任务或等待结果
try {
// 从Future对象中获取结果
String result = future.get();
System.out.println(result); // 输出:任务完成
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
// 关闭执行服务
executorService.shutdown();
}
}
在这个例子中,我们:
- 创建了一个
ExecutorService
实例,用于管理线程池。 - 实现了一个
Callable
接口的匿名类,并在call
方法中模拟了一些计算任务。 - 使用
executorService.submit(callableTask)
提交任务,该方法返回一个Future
对象。 - 使用
future.get()
获取任务的结果,这个方法会阻塞当前线程,直到任务完成并返回结果。 - 最后,关闭
ExecutorService
。
Callable
接口与 Runnable
接口的区别主要在于:
Callable
可以返回一个结果,而Runnable
不能。Callable
可以抛出受检异常,而Runnable
不能。
希望这个例子对你有帮助!如果你还有其他问题或需要更多示例,请告诉我。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/190480.html