我不确定在线程中处理 RuntimeException
的最佳方法是什么。
假设我有一个线程 A,它使用第 3 方函数 b()
将数据发送到服务器 S。现在 b()
可以抛出一些 RuntimeException 而失败将数据推送到指定的服务器。在那种情况下,我必须运行一个将数据推送到本地数据库的方法 c()
。现在方法 c()
也可以在无法写入数据库时抛出 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()
。
处理这个问题的一种方法是将 b()
和 c()
包裹在一个 try-catch block 周围并捕获一个 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 block 包围方法调用,这将捕获已检查和未检查的异常。
关于java - 如何在线程中处理 RuntimeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47069352/