Callable接口是Java中的一个泛型接口,它代表一个可以返回结果并可能抛出异常的任务。与Runnable接口不同,Callable接口的call()方法可以返回一个值,并且允许抛出受检查的异常。
下面是Callable接口的声明:
@FunctionalInterface
public interface Callable<V> {
V call() throws Exception;
}
Callable接口只有一个方法call(),该方法没有参数,返回类型为泛型V。在执行任务时,你需要实现Callable接口,并提供自定义的逻辑来完成具体的任务。任务执行完毕后,call()方法会返回一个结果对象。
Callable接口通常与ExecutorService
一起使用,通过调用submit(Callable<T> task)
方法将任务提交给线程池执行,并返回一个表示任务结果的Future对象。你可以通过Future对象获取任务的执行结果或取消任务的执行。
下面是一个简单的示例,演示了如何使用Callable和ExecutorService来执行一个任务并获取结果:
import java.util.concurrent.Callable;
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 executor = Executors.newSingleThreadExecutor();
// 创建一个Callable任务
Callable<String> callableTask = () -> {
Thread.sleep(2000); // 模拟耗时操作
return "Hello, World!";
};
// 提交任务并获取Future对象
Future<String> future = executor.submit(callableTask);
try {
// 获取任务的结果
String result = future.get();
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
// 关闭线程池
executor.shutdown();
}
}
在上面的示例中,我们创建了一个Callable任务,并使用ExecutorService
提交任务。通过调用future.get()
方法,我们可以获取任务的执行结果。