惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
Jina AI
Jina AI
WordPress大学
WordPress大学
Recent Announcements
Recent Announcements
G
Google Developers Blog
I
InfoQ
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
P
Proofpoint News Feed
MyScale Blog
MyScale Blog
M
MIT News - Artificial intelligence
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
C
Check Point Blog
J
Java Code Geeks
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Microsoft Security Blog
Microsoft Security Blog
MongoDB | Blog
MongoDB | Blog
V
Visual Studio Blog
人人都是产品经理
人人都是产品经理
量子位
A
About on SuperTechFans
D
DataBreaches.Net
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - Matt_Cheng

AI编码实践 对于动态注册的bean,aop会生效吗? LLM VSCode快捷命令 图平台技术点 常用CMD命令 jupyter安装与使用 数据结构文章收藏 使用beeline访问hive 属性文件加载 node.js待实践项目 spring boot问题记录 docker命令 IDEA环境配置与快捷命令 Spring MVC 使用介绍(十六)数据验证 (三)分组、自定义、跨参数、其他 Spring MVC 使用介绍(十五)数据验证 (二)依赖注入与方法级别验证 Spring MVC 使用介绍(十四)文件上传下载 2018年年终总结
Java线程异常处理
Matt_Cheng · 2022-07-27 · via 博客园 - Matt_Cheng

一  线程类型

Java程序使用的线程分为两类:

  • 手动创建的线程
  • 线程池管理的线程

二  异常默认处理

对于手动创建的线程,线程运行过程中抛出未捕获的异常的默认行为如下:

1  线程终止,异常信息及堆栈输出到标准错误流(System.err())

2  阻塞线程(Thread.join())正常执行

对于线程池管理的线程,线程运行过程中抛出未捕获的异常的默认行为根据发起任务的方式分为两种情况:

  • Executor.execute()

    1  线程终止,异常信息及堆栈输出到标准错误流(System.err())

    2  阻塞线程(Executor.awaitTermination())正常执行

  • Executor.submit()

    1  线程终止,无异常信息输出

    2  阻塞线程(Executor.awaitTermination())正常执行

    3  阻塞线程(Future.get())抛出异常信息

三  异常处理

异常处理有两种方式,推荐方式1

  1  在任务中捕获异常并处理

  2  对于手动创建的线程及线程池Executor.execute()处理线程,可在新建线程时通过Thread.setUncaughtExceptionHandler()指定处理方法。该方法对Executor.submit()处理线程无效,须在阻塞线程主动调用Future.get(),再捕获异常