Thread.setDefaultUncaughtExceptionHandler作用


剛剛看到ResourceManager源碼第一行,就遇到了比較陌生的用法,特意研究一下,如何使用?

看源碼的目標不就是學習,更好的來完善自己的代碼,而不是面試時候的談資。

 

下面是一個自己寫的demo,setDefaultUncaughtExceptionHandler作用相當於一個全局的catch。一般情況下用於記錄當程序發生你未捕獲的異常的時候,調用一個你默認的handler來進行某些操作,比如記錄客戶端版本,異常信息,等客戶信息,方便收集異常原因。

 

通常來講,會針對,某段代碼做try … catch 沒有catch到的代碼,發生異常的時候,就會由setDefaultUncaughtExceptionHandler來處理。

package com.yanbit.source.study;

import java.lang.Thread.UncaughtExceptionHandler;

/**
* @author yanbit
*
*/
public class GlobExceptionHandler {
  public static void main(String[] args) {
    Thread t = new Thread(new AdminThread());
    t.setDefaultUncaughtExceptionHandler(new ExceptionHandler()); //對當前線程設置默認catch
    t.start();
  }
}

class AdminThread implements Runnable {
  @Override
  public void run() {
    try {
      Thread.sleep(2000);
      System.out.println("start ... Exception");
      Thread.sleep(2000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    throw new NullPointerException(); //直接exception
  }
}

class ExceptionHandler implements UncaughtExceptionHandler {

  @Override
  public void uncaughtException(Thread t, Throwable e) { //調用此方法來進行,對異常處理,需要實現UncaughtExceptionHandler 接口
    System.out.println("Thread:" + t + " Exception message:" + e);
  }
}

 

太贊了,又從開源項目學到一些東西。over


免責聲明!

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



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