主题
面试速答(先看这里)
**一句话结论:**因为Java本身就是支持多线程的,每个Java线程都是相对独立的执行单元,每个线程是独立的执行上下文,异常只会影响抛出异常的线程。
60秒标准回答:
Java线程出现异常,如果这里的异常是我们认知中的Exception的话,JVM进程其实是不会退出的
因为Java本身就是支持多线程的,每个Java线程都是相对独立的执行单元,每个线程是独立的执行上下文,异常只会影响抛出异常的线程。所以当一个线程抛出异常时,只会影响到该线程本身。其他线程将继续执行,不受异常的影响
而且,在Java中,我们是可以自己主动的通过异常处理机制来捕获和处理异常的。如果在线程的代码中使用try-catch块来捕获异常,并在catch块中处理异常,那么异常不会传播到线程的外部,也不会影响整个进程的执行
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**Java线程出现异常,如果这里的异常是我们认知中的Exception的话,JVM进程其实是不会退出的。
- **要点2:**而且,在Java中,我们是可以自己主动的通过异常处理机制来捕获和处理异常的。
- **要点3:**即使有的异常我们并没有捕获,Java也认为这些异常并不是特别严重(因为严重的话就不是异常,而是ERROR了),所以JVM并不会因为一个线程的异常就直接把JVM进程直接退出。
**记忆锚点:**Java → JVM → Java线程出现异常 → 会影响抛出异常的线程 → 动的通过异常处理机制 → 么异常不会传播到线程
加分表达:
- Java线程出现异常,如果这里的异常是我们认知中的Exception的话,JVM进程其实是不会退出的。
- 如果在线程的代码中使用try-catch块来捕获异常,并在catch块中处理异常,那么异常不会传播到线程的外部,也不会影响整个进程的执行。
追问准备:
- 围绕「Java」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「JVM」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「Java线程出现异常」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
Java线程出现异常,如果这里的异常是我们认知中的Exception的话,JVM进程其实是不会退出的。
因为Java本身就是支持多线程的,每个Java线程都是相对独立的执行单元,每个线程是独立的执行上下文,异常只会影响抛出异常的线程。所以当一个线程抛出异常时,只会影响到该线程本身。其他线程将继续执行,不受异常的影响。
而且,在Java中,我们是可以自己主动的通过异常处理机制来捕获和处理异常的。如果在线程的代码中使用try-catch块来捕获异常,并在catch块中处理异常,那么异常不会传播到线程的外部,也不会影响整个进程的执行。
即使有的异常我们并没有捕获,Java也认为这些异常并不是特别严重(因为严重的话就不是异常,而是ERROR了),所以JVM并不会因为一个线程的异常就直接把JVM进程直接退出。
扩展知识
多线程异常处理
打开文档:✅为什么不能在try-catch中捕获子线程的异常?