Skip to content

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()方法,我们可以获取任务的执行结果。