UncaughtExceptionHandler:java未捕获的异常/错误默认处理方式
生活随笔
收集整理的這篇文章主要介紹了
UncaughtExceptionHandler:java未捕获的异常/错误默认处理方式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
UncaughtExceptionHandler:java未捕獲的異常/錯誤
@(JAVA)[java]
java有一部分異常屬于運行時異常,這類異常發(fā)生時通過會導(dǎo)致程序發(fā)生錯誤,導(dǎo)致退出。如數(shù)據(jù)下標(biāo)過大,內(nèi)存不足等。
對于這類異常,默認(rèn)的情況是打印相關(guān)的錯誤stack,然后退出程序。但這對于用戶而言十分不友好;另外,有可以發(fā)生異?;蛘咤e誤時不希望程序退出。
此時可以為線程添加一個默認(rèn)的異常處理器。
主要使用
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {public void uncaughtException(Thread thread, Throwable thrown) {.....} }來處理未捕獲的異常。也可以使用setUncaughtExceptionHandler,但這只對當(dāng)前線程生效,default的話默認(rèn)對所有線程生效。
另注意,Error和Exception 都實現(xiàn)了Throwable,而它們之間沒有直接關(guān)系
public class UncaughtExceptionHandlerDemo {private static Logger LOG = LoggerFactory.getLogger(UncaughtExceptionHandlerDemo.class);public static void main(String[] args) {setupDefaultUncaughtExceptionHandler();//NO argument pass to main, so ArrayIndexOutOfBoundsException will occur.System.out.println(args[1]);}public static void setupDefaultUncaughtExceptionHandler() {Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {public void uncaughtException(Thread thread, Throwable thrown) {try {handleUncaughtException(thrown);} catch (Error err) {// LOG.error("Received error in main thread.. terminating server...", err);System.err.println("Received error in main thread.. terminating server..." + err);Runtime.getRuntime().exit(-2);}catch(Exception e){System.err.println("Exception happen. Cause: " + e.getMessage());e.printStackTrace();}}});}public static void handleUncaughtException(Throwable t) throws Exception {if (t != null && t instanceof Error) {if (t instanceof OutOfMemoryError) {try {System.err.println("Halting due to Out Of Memory Error..." + Thread.currentThread().getName());} catch (Throwable err) {//Again we don't want to exit because of logging issues.}Runtime.getRuntime().halt(-1);} else {//Running in daemon mode, we would pass Error to calling thread.throw (Error) t;}}else{throw (Exception) t;}}}總結(jié)
以上是生活随笔為你收集整理的UncaughtExceptionHandler:java未捕获的异常/错误默认处理方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java内存组成GC算法
- 下一篇: HBase 1.x Coprocesso