java 多线程为何会出现无法捕获异常的现象?
提出问题:
很多Java初学者在初学java 多线程的时候可能会看到如下代码:
public class ExceptionThread implements Runnable{
@Override
public void run() {
throw new RuntimeException();
}
public static void main(String[] args) {
try{
ExecutorService exec= Executors.newCachedThreadPool();
exec.execute(new ExceptionThread());
}catch(RuntimeException e){
System.out.println("Exception has been handled");
}
}
}
运行结果如下:

该代码已经try-catch捕获了异常,为何还是未执行System.out.println("Exception has been handled") ?
解答:
举个例子。
放学了,小朋友们排着队,跟着老师,走向校门口。老师停,学生停;老师走,学生走。瞎跑是不行的。
到了门口,来了二十个家长,接了二十个小朋友,各回各家,老师也回家了。
校内的路,老师和同学可以看作在一个线程内的,顺序执行,前边的停下来,后边的必须等。到了门口,家长接了,就等于分出了一个线程,二十个家长,二十个线程,每个线程负责把自己的孩子送回家,线程之间没有次序依赖,同时进行。
如果一个线程出了异常,比如跟家长回家的路上,一个小朋友跌倒了,要去医院。显然,这不影响其的小朋友回家,也不该归放了学的老师管。是由受伤小朋友的家长处理,也就是说,异常应由所在的线程处理,别的线程没有义务或上下文,来处理你的异常。
本质上来说,分一个线程,意味着不必等。就像老师不必等待所有孩子都到家才下班。不必等,意味着不知道其他线程的进度,也不必处理其他线程的问题。
孩子摔倒时,老师可能已经到家了,就好像题主的代码里,新线程里出异常,原线程可能已经跑完了。
我有一个微信公众号,经常会分享一些Java技术相关的干货;如果你喜欢我的分享,可以用微信搜索“Java团长”或者“javatuanzhang”关注。
java 多线程为何会出现无法捕获异常的现象?的更多相关文章
- JAVA多线程和并发基础面试问答(转载)
JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...
- Java多线程学习(转载)
Java多线程学习(转载) 时间:2015-03-14 13:53:14 阅读:137413 评论:4 收藏:3 [点我收藏+] 转载 :http://blog ...
- [转] JAVA多线程和并发基础面试问答
JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...
- JAVA多线程和并发基础面试问答
转载: JAVA多线程和并发基础面试问答 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对 ...
- 【多线程】JAVA多线程和并发基础面试问答(转载)
JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...
- 50个Java多线程面试题
不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java 语言一个重要的特点就是内置了对并发的支持,让 Java 大受企业和程序员的欢迎.大多数待遇丰厚的 Java 开发职位都要求开发者 ...
- (转)JAVA多线程和并发基础面试问答
JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...
- Java多线程(二) —— 线程安全、线程同步、线程间通信(含面试题集)
一.线程安全 多个线程在执行同一段代码的时候,每次的执行结果和单线程执行的结果都是一样的,不存在执行结果的二义性,就可以称作是线程安全的. 讲到线程安全问题,其实是指多线程环境下对共享资源的访问可能会 ...
- 50个Java多线程面试题(上)
Java 语言一个重要的特点就是内置了对并发的支持,让 Java 大受企业和程序员的欢迎.大多数待遇丰厚的 Java 开发职位都要求开发者精通多线程技术并且有丰富的 Java 程序开发.调试.优化经验 ...
随机推荐
- Java 父类的static成员在子类中的继承情况
父类的static成员在子类中的继承状况是怎么样的呢? 昨天突然想到这个问题,刚才试验了一下,发现很容易解释,没什么值得探讨的. 首先在学习继承时,书本都没有强调static成员有什么特殊的地方. 然 ...
- leecode刷题(23)-- 合并两个有序链表
leecode刷题(23)-- 合并两个有序链表 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2-> ...
- WPF中Matrix介绍
最近在做一些图形变换操作的功能,图形变换涉及大学中的矩阵运算部分的知识,又重新复习了一下矩阵.这里做一下记录.由于不知道矩阵如何输入,一个个截图又麻烦,所以这里就全部用截图了^-^.
- 数据绑定-@RequestParam
@PathVariable,前面已经讲过了 @RequestParam 作用:获取请求中的参数,GET请求,问号后面的请求参数,POST:请求体中的KV数据. 测试:
- 分布式的几件小事(三)dubbo的通信协议与序列化
1.dubbo的通信协议 ①dubbo协议 Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况. 特点 : dubbo缺 ...
- 89. Gray Code (Java)
The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...
- 使用pt-table-checksum检查主从一致性
使用 percona 工具检查主从不一致 可以使用 pt-table-checksum 工具检查主从数据的一致性,检查完之后默认会生成一个 percona 库以及一个 checksums 表,记录了 ...
- plsql执行sql
第一步找执行的命令:: plsql ::::::::::File----->>>>Change Windows to ------->>>Command Wi ...
- dumpe2fs Linux支持的文件系统
dumpe2fs (-bh)装置文件名 选项与参数: -b : 列出保留为坏轨的部分 -h : 仅列出superblock的数据,不会列出其他的区段内容 查看Linux支持的文件系统哪些支持: ls ...
- cmd窗口颜色设置
color 02 第一个数字是背景颜色,第二个是文字颜色.