当前位置: 首页 > news >正文

Runnable和Callable接口的区别【简单易懂】

一、前言

  • Runnable 和 Callable 是 Java 多线程编程中用于定义任务的接口。

二、详细区别

  • 返回值
    • Runnable 的 run() 方法无返回值,适合无需返回结果的任务(如日志记录)。
    • Callable 的 call() 方法返回泛型值,可通过 Future.get() 获取结果(需注意此方法会阻塞主线程)。
  • 异常处理
    • Runnable 的 run() 方法只能通过 try-catch 内部处理异常,无法向外传递。
    • Callable 的 call() 方法可抛出受检异常,外部通过 Future.get() 捕获 ExecutionException,并通过 e.getCause() 获取原始异常信息。
  • 使用方式
    • Runnable 可直接通过 new Thread(runnable).start() 启动,或提交至 ExecutorService。
    • Callable 必须通过 ExecutorService.submit() 提交,返回 Future 对象用于管理任务状态和结果。
      在这里插入图片描述

三、区别总结

在这里插入图片描述


四、示例代码

// Runnable 示例
Runnable runnableTask = () -> System.out.println("Runnable任务执行");
new Thread(runnableTask).start();// Callable 示例
Callable<String> callableTask = () -> {if (someCondition) throw new Exception("Callable异常");return "Callable任务结果";
};
Future<String> future = executorService.submit(callableTask);
String result = future.get(); // 阻塞获取结果

五、应用场景

  • Runnable:日志记录、异步通知等简单任务
  • Callable:数据库查询、文件处理等需要结果或异常监控的任务

相关文章:

  • 营销自动化实战指南:如何用全渠道工作流引爆线索转化率?
  • string的模拟实现 (6)
  • UE5游戏分辨率设置和窗口模式
  • 【JAVA】bat文件启动jar场景获取bat文件路径的方法
  • 回调函数用法详细讲解
  • L1-002 打印沙漏
  • libwebsocket建立服务器需要编写LWS_CALLBACK_ADD_HEADERS事件处理
  • [区块链lab2] 构建具备加密功能的Web服务端
  • 基于javaEE+jqueryEasyUi+eclipseLink+MySQL的课程设计客房管理信息系统
  • 【系统搭建】Ubuntu系统两节点间SSH免密配置
  • KALI搭建log4j2靶场及漏洞复现全流程
  • Uniapp:列表选择提示框
  • JSP技术入门指南【一】利用IDEA从零开始搭建你的第一个JSP系统
  • Docker Compose 命令实现动态构建和部署
  • 2025年推荐使用的开源大语言模型top20:核心特性、选择指标和开源优势
  • 全链路开源数据平台技术选型指南:六大实战工具链解析
  • 纷析云开源财务软件:企业财务数字化转型的灵活解决方案
  • lombok requires enabled annotation processing
  • 三层路由器,SSH远程登录访问路由器,通过telnet远程登录访问路由器(不安全),路由器的基本设置之多网络互联解决办法:单臂路由
  • Web3技术如何提升用户数据保护
  • xd软件可做网站吗/培训课程名称大全
  • 成都政务网站建设/西安网站到首页排名
  • 做投注网站多少钱/市场营销推广方案模板
  • 如果做网站用java/泉州seo培训
  • 培训网站欣赏/新闻摘抄2022最新5篇
  • 行业网站系统/网店推广软文范例