其他分享
首页 > 其他分享> > 如何在线程中处理RuntimeException

如何在线程中处理RuntimeException

作者:互联网

我不确定在线程中处理RuntimeException的最佳方法是什么.
假设我有一个线程A,它使用第三方函数b()将数据发送到服务器S.现在b()可以抛出一些RuntimeException并且无法将数据推送到指定的服务器.在这种情况下,我必须运行一个方法c(),它将数据推送到本地数据库.现在方法c()如果无法写入db,也会抛出RuntimeException.

例:

public class A() extends Runnable {
    @Override
    public void run() {
        // throws some specific RuntimeExceptions in case it fails  
        b(data, "<some https end point>");
    } 
}

现在,如果b()不能按预期工作,我必须执行方法c().

处理此问题的一种方法是围绕try-catch块包装b()和c()并捕获RuntimeException,如下所示

    public void run() {
        // throws some specific RuntimeExceptions in case it fails 
        try {
        b(data, "<some https end point>");
        } catch (RuntimeException e) {
             try {
               c(data)
             } catch(RuntimeException e) {
                //Log the error
             }
        }
    } 

虽然这有效,但我不太习惯以这种方式捕获泛型异常.其他建议似乎是通过Future对象处理异常(当提交给某些执行程序服务时).这是一种更好的做法吗?如果是这样,为什么?

解决方法:

首先,你永远不应该捕获RuntimeException,因为它们并不意味着被捕获.它们表明您的算法存在问题,当您看到它时,您应该去修复您的代码.
任何为预期的故障情况抛出RuntimeException的库都设计得不好.

如果你正在构建一个解决方案只是为了保持你的线程正常工作(因为你必须使用一个设计不合理的库),请使用try-catch块包围方法调用,这将捕获已检查和未检查的异常.

标签:java,exception-handling,java-threads
来源: https://codeday.me/bug/20190710/1426681.html