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

threadPool.submit() 和 threadPool.execute()的区别

在 Java 中,threadPool.submit()threadPool.execute() 都是用于向线程池提交任务的方法,但它们有 重要区别,主要体现在:


1. 返回值不同

方法返回类型是否能获取任务结果
execute(Runnable)void❌ 不能获取执行结果
submit(Runnable)Future<?>✅ 可以获取/检查结果,或异常

🔹 举例说明:

threadPool.execute(() -> {// 执行任务,但不能拿到结果
});Future<?> future = threadPool.submit(() -> {// 执行任务
});
// 你可以通过 future.get() 获取结果(或异常)

2. 异常处理行为不同

  • execute() 中如果抛出异常,线程池不会抛出异常给调用者,可能会被吞掉,或者打印在日志中;
  • submit() 会把异常封装进 Future 对象中,你可以通过 future.get() 获取异常信息。

🔹 举例:

threadPool.submit(() -> {throw new RuntimeException("Error");
}).get(); // 会抛出 ExecutionException(封装了原始异常)

3. submit 支持 Callable,而 execute 不支持

Callable<String> task = () -> "Hello";
Future<String> future = threadPool.submit(task);
  • submit() 可以接受 Callable<T>,并返回 Future<T>,从而获取返回值。
  • execute() 只能接受 Runnable,没有返回值。

4. 总结

特性execute()submit()
返回值voidFuture<?>
能否拿到任务结果
是否支持 Callable
异常处理异常可能被吞异常可通过 Future.get() 捕获
使用场景只需执行任务需要结果/异常处理

5. 用法

  • 不关心任务结果或异常 → 用 execute()
  • 需要任务返回值或处理异常 → 用 submit()
http://www.xdnf.cn/news/8525.html

相关文章:

  • nvidia Thor U与qualcomm 8295 DMPIS算力测试对比
  • 日志分析-IIS日志分析
  • Oracle常用函数
  • 关于使用高德安卓api时so文件的坑
  • 解锁 BADBOX 2.0 的 DNS 密码箱
  • IP-guard发布新版本4.87.2241.0
  • matlab2007 和 microsoft access怎么连接?
  • java将rtsp转成flv在浏览器播放
  • 【HTML-9】深入理解HTML超链接标签:从基础到高级应用
  • 第R7周:糖尿病预测模型优化探索
  • YOLO12改进-Backbone-引入Swin Transformer替换backbone
  • 地理特征类可视化图像总结
  • Java面向对象编程核心:封装、继承与多态
  • AT24C02(I2C总线)
  • C# TCP协议全面指南:从可靠传输到企业级高并发的深度实践​
  • 当 BIM 遇见 GIS:GISBox 中 Revit 数据导入的技术联动与应用场景
  • 《AI 绘画崛起,人类艺术家如何在夹缝中寻找新机遇?》
  • 复杂工况下液压挖掘机工作臂系统创新设计与性能优化
  • 如何在STM32CubeMX下为STM32工程配置调试打印功能
  • 使用pip安装ptflops报错
  • 探索Qwen2ForCausalLM 架构上进行微调
  • k8s容器入门(2) 容器化组件“可漂移“
  • 企业知识管理面临的挑战与飞书知识问答的解决方案
  • 字节开源多模态文档图像解析模型:Dolphin
  • 【FastAPI】--基础教程
  • 使用compressorjs实现前端图片压缩
  • 文章记单词 | 第106篇(六级)
  • 提高 Maven 项目的编译效率
  • 苍穹外卖day1实战,Idea中Lombok编译时“找不到符号”,更改JDK版本最全流程,作者亲身尝试
  • 【JavaScript篇】对象武林:构造函数创世录与实例江湖风云