Java 线程相关的三个常见接口、类

1. Runnable

  • 最早期的接口,用来封装任务逻辑。
  • 没有返回值、不能抛出受检异常。
java 复制代码
Runnable task = () -> System.out.println("Hello Runnable");
new Thread(task).start();

2. Callable

  • JDK 1.5 引入,和 Runnable 类似,但 有返回值,可以抛出异常。
java 复制代码
Callable<Integer> task = () -> {
    return 42;
};
ExecutorService pool = Executors.newSingleThreadExecutor();
Future<Integer> future = pool.submit(task);
System.out.println(future.get());  // 输出 42

3. Future

  • 代表一个 异步任务的结果 ,用来获取 Callable 执行的返回值。
  • 提供了 get()cancel()isDone() 等方法。
java 复制代码
Future<Integer> future = pool.submit(() -> 42);
if (!future.isDone()) {
    System.out.println("任务还没完成");
}
System.out.println(future.get()); // 阻塞等待返回 42

三者关系

  • Runnable只管执行,无返回值。
  • Callable可执行 + 有返回值
  • Future拿结果的票据,执行完后从这里取。
markdown 复制代码
       Runnable                Callable
         │                        │
         ▼                        ▼
   提交给 ExecutorService(线程池)
                │
                ▼
             Future

一般配合线程池使用:

java 复制代码
ExecutorService pool = Executors.newFixedThreadPool(3);
Future<String> f = pool.submit(() -> "Hello Callable");
System.out.println(f.get()); // 从 Future 拿结果

🔑 口诀

  • Runnable:干活,不给结果。
  • Callable:干活,能返回结果,还能抛异常。
  • Future:小票,凭票取结果。
特性 Runnable Callable<V> Future<V>
所在包 java.lang java.util.concurrent java.util.concurrent
主要作用 封装一个可执行任务 封装一个可执行任务(可返回结果/抛异常) 表示异步任务的结果/控制
核心方法 void run() V call() throws Exception get(), cancel(), isDone(), isCancelled()
返回值 无返回值 有返回值(泛型 V) 保存并提供 Callable/Runnable 的执行结果
异常处理 不能抛出受检异常 可以抛出受检异常 get() 时会封装为 ExecutionException 抛出
使用方式 new Thread(runnable).start() 或提交到线程池 提交到线程池执行 提交任务时返回 Future 对象,用于获取结果
常见场景 简单任务,不关心结果 需要返回计算结果,或可能抛出异常 异步任务结果获取、取消任务
相关推荐
怪兽源码28 分钟前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
csdn_aspnet1 小时前
ASP.NET Core 中的依赖注入
后端·asp.net·di·.net core
昊坤说不出的梦2 小时前
【实战】监控上下文切换及其优化方案
java·后端
疯狂踩坑人2 小时前
【Python版 2026 从零学Langchain 1.x】(二)结构化输出和工具调用
后端·python·langchain
橘子师兄3 小时前
C++AI大模型接入SDK—ChatSDK封装
开发语言·c++·人工智能·后端
@ chen4 小时前
Spring事务 核心知识
java·后端·spring
一点技术5 小时前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
RANCE_atttackkk5 小时前
Springboot+langchain4j的RAG检索增强生成
java·开发语言·spring boot·后端·spring·ai·ai编程
好好研究7 小时前
Spring Boot - Thymeleaf模板引擎
java·spring boot·后端·thymeleaf
爬山算法7 小时前
Hibernate(76)如何在混合持久化环境中使用Hibernate?
java·后端·hibernate