gpt4 book ai didi

java - 在调度程序中捕获 Throwable 是一个好习惯吗?

转载 作者:行者123 更新时间:2023-11-29 04:08:00 24 4
gpt4 key购买 nike

我宁愿说快速失败而不捕获 Throwable 是一个很好的做法。但如果请求处理器中出现未处理的异常,如 StackOverflowError,任务可能会停止。这并不总是听起来不错。我宁愿一遍又一遍地捕获 StackOverflowError,但可能会处理一些任务。这里有什么好的做法?

最佳答案

没有关于捕获 ErrorThrowable 的“良好实践”或“最佳实践”1

  • 一方面,在某些情况下,JVM 可以从某些类型的错误 中成功恢复。例如,如果您在不与其他线程(直接或间接)交互的单个线程上运行“任务”,则该线程可以安全地从 StackOverflowError 和可能的2 OutOfMemoryError

  • 另一方面,许多 Error 子类表示应用程序或 JVM 处于无法恢复或不可行的状态:

    • 类加载或初始化错误意味着某些类将处于不可用状态。依赖该类的应用程序将无法继续。
    • 如果使用通知/等待或更高级别同步构造的应用程序在一个线程上收到(比方说)OutOfMemoryError 错误,它可能会让其他线程等待可能永远不会到达的通知等.

我的建议是注意 javadoc 中隐含的建议对于 Error 而不是捕获并尝试从 Error 或其子类中恢复。如果您尝试恢复,请考虑应用程序可能“楔入”的可能性。


1 - 实际上,根本没有“最佳实践”;见https://www.satisfice.com/blog/archives/5164

2 - 这取决于根本原因。如果根本原因是代码库中其他地方的内存泄漏,那么恢复是个坏主意。 OOME 可能会以越来越高的频率再次出现。

关于java - 在调度程序中捕获 Throwable 是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57090854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com