Java 多线程之 Callable 与 Future 详解

摘要:​ 对比 Runnable 与 Callable,讲解如何通过 Future 获取异步任务的返回值。

在 Java 中,创建线程除了实现 Runnable 接口,还有 Callable 接口。两者的核心区别在于:Runnable 的 run() 方法没有返回值,而 Callable 的 call() 方法有返回值,并且能抛出异常。

使用示例

javajavaExecutorService executor = Executors.newSingleThreadExecutor();
Future<Integer> future = executor.submit(() -> {
    Thread.sleep(2000);
    return 100;
});

// 此时主线程可以做其他事情
Integer result = future.get(); // 阻塞直到拿到结果
System.out.println("计算结果:" + result);
executor.shutdown();

注意事项

future.get()是阻塞方法。在实际开发中,通常使用 CompletableFuture来实现回调,避免主线程阻塞。

开发随笔:多线程开发一定要关注线程池的关闭和资源释放,否则容易造成线程堆积。

类似文章