如何手动处理未经检查的异常以进行日志记录,恢复或任何自定义工作?

时间:2013-09-11 08:25:16

标签: java multithreading exception-handling

我正在创建未经检查的异常。我看到的是大多数异常调用super()。所以我遵循了类似的模式。

我想知道如何处理未经检查的异常(系统定义和自定义)以进行日志记录,恢复应用程序或从特定方法或任何其他自定义工作?

我正在研究多线程环境(Socket编程)。 创建一个主线程,它将创建一个网络服务,它将创建一个ThreadPoolExecutor并打开套接字并在while循环中接受它,并将任务发送给ThreadPoolExecutor创建的线程。 现在,如果一个线程抛出未经检查的异常,那么根据未经检查的异常的严重性,我会杀死该线程或按原样继续,但记录两种情况。

我将仅创建未经检查的异常。如果我捕获未经检查的异常,那么就没有必要将其取消选中。那么有什么方法可以解决这个问题。

在Spring中,我使用了@ControllerAdvice和@ExceptionHandler来管理未经检查的异常。但我不知道如何在套接字编程中执行此操作。 请建议并指导我的经验。

此外,我已经看到许多框架如Spring,Hibernate正在通过在未经检查的异常中包装已检查的异常来转向未经检查的异常。

请不要建议我使用经过检查的例外情况,因为这是一个值得商榷的话题。结论。

3 个答案:

答案 0 :(得分:1)

您要做的是使用Thread.setDefaultUncaughtExceptionHandler()Thread.setUncaughtExceptionHandler()功能。

您可以在Thread级别,ThreadGroup级别和Runtime级别设置处理程序。

  

设置当线程突然终止到期时调用的默认处理程序   到未捕获的异常,并没有为其定义其他处理程序   那个帖子。未捕获的异常处理首先由   线程,然后由线程的ThreadGroup对象,最后由   默认未捕获异常处理程序。如果线程没有   显式未捕获异常处理程序集,以及线程的线程组   (包括父线程组)不专门化它   uncaughtException方法,然后是默认处理程序的uncaughtException   方法将被调用。

     

通过设置默认的未捕获异常处理程序,应用程序可以   改变处理未捕获异常的方式(例如   记录到那些线程的特定设备或文件   已接受系统提供的任何“默认”行为。

     

请注意,默认的未捕获异常处理程序通常不应该   推迟线程的ThreadGroup对象,因为这可能导致无限   递归。

这是以通用方式处理致命错误的最佳方法,而不会丢失与异常源相关联的堆栈跟踪。

答案 1 :(得分:0)

未经检查的异常通常保留用于不可恢复的异常。

但是如果你需要捕获一个未经检查的异常,你可以在线程的Run方法中捕获Throwable,因为所有异常都扩展为Throwable。

但是当你在这个级别抓到它时,你将无法恢复。你唯一能做的就是登录。

答案 2 :(得分:-1)

如果要创建自定义异常类,我建议的最简单方法是扩展异常类。

Asception类由编译时和运行时异常类扩展。因此,您可以捕获编译时和运行时异常。