如何在线程中处理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