java多线程中的异常处理机制简析

胖墩儿团团

胖墩儿团团

2016-02-19 11:44

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的java多线程中的异常处理机制简析,手机电脑控们准备好了吗?一起看过来吧!
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉。这一点是通过java.lang.Runnable.run()方法声明(因为此方法声明上没有throw exception部分)进行了约束。但是线程依然有可能抛出unchecked exception,当此类异常跑抛出时,线程就会终结,而对于主线程和其他线程完全不受影响,且完全感知不到某个线程抛出的异常(也是说完全无法catch到这个异常)。JVM的这种设计源自于这样一种理念:“线程是独立执行的代码片断,线程的问题应该由线程自己来解决,而不要委托到外部。”基于这样的设计理念,在Java中,线程方法的异常(无论是checked还是unchecked exception),都应该在线程代码边界之内(run方法内)进行try catch并处理掉.

但如果线程确实没有自己try catch某个unchecked exception,而我们又想在线程代码边界之外(run方法之外)来捕获和处理这个异常的话,java为我们提供了一种线程内发生异常时能够在线程代码边界之外处理异常的回调机制,即Thread对象提供的setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)方法。

通过该方法给某个thread设置一个UncaughtExceptionHandler,可以确保在该线程出现异常时能通过回调UncaughtExceptionHandler接口的public void uncaughtException(Thread t, Throwable e) 方法来处理异常,这样的好处或者说目的是可以在线程代码边界之外(Thread的run()方法之外),有一个地方能处理未捕获异常。但是要特别明确的是:虽然是在回调方法中处理异常,但这个回调方法在执行时依然还在抛出异常的这个线程中!

比之上述方法,还有一种编程上的处理方式可以借鉴,即,有时候主线程的调用方可能只是想知道子线程执行过程中发生过哪些异常,而不一定会处理或是立即处理,那么发起子线程的方法可以把子线程抛出的异常实例收集起来作为一个Exception的List返回给调用方,由调用方来根据异常情况决定如何应对。不过要特别注意的是,此时子线程早以终结。

展开更多 50%)
分享

猜你喜欢

java多线程中的异常处理机制简析

编程语言 网络编程
java多线程中的异常处理机制简析

解析Java的多线程机制

编程语言 网络编程
解析Java的多线程机制

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

PHP5的异常处理机制

PHP
PHP5的异常处理机制

Java 程序中的多线程

编程语言 网络编程
Java 程序中的多线程

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

浅析Java多线程程序设计机制

编程语言 网络编程
浅析Java多线程程序设计机制

了解Java中的异常机制

编程语言 网络编程
了解Java中的异常机制

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

java自定义注解接口实现方案

java自定义注解接口实现方案

忘记系统密码的解决办法

忘记系统密码的解决办法
下拉加载更多内容 ↓