Jvm處理Java Thread 的run方法中拋出異常的流程


眾所周知,Java中在進行方法調用的時候,可能存在兩種異常處理的場景:

  1. 被調用的方法在定義的時候就存在throws關鍵字,這種被拋出的異常,在Thread的run方法中,只能被try-catch語句塊捕獲,因為run方法本身是沒有throws關鍵字的;
  2. 被調用的方法在定義的時候不存在throws關鍵字,但是仍然可能拋出異常,比如在Thread的run方法中,調用String的Parse系列方法對非數字的字符進行解析,就可能會拋出NumberFormatException,這種JVM是按照如下方式處理的:
    • 首先看當前的線程,是否在start之前,通過調用setUncaughtExceptionHandler(UncaughtExceptionHandler, eh),設置了UncaughtExceptionHandler;如果已經設置,則使用此ExceptionHandler來處理;
    • 否則,查看當前Thread所在的ThreadGroup,是否設置了UncaughtExceptionHandler;如果已經設置,則使用此ExceptionHandler來處理;
    • 否則,查看Thread層面是否設置了UncaughtExceptionHandler,Thread類的靜態方法setDefaultUncaughtExceptionHandler進行設置;如果已經設置,則使用此ExceptionHandler來處理;
    • 如果上述UncaughtExceptionHandler都沒有找到,那么JVM會直接在console中打印Exception的StackTrace信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM