Java异步异常:是否可以捕获它们?
我一直在阅读JLS,并且遇到了11.1.3节。我引用的异步异常是:
大多数异常是由于它们所发生的线程的操作而同步发生的,并且在程序中被指定为可能导致此类异常的某个点处发生。相反,异步异常是在程序执行的任何时候都可能发生的异常。
和
异步异常仅由于以下原因而发生:
[…]
*
Java虚拟机中的内部错误或资源限制,阻止其实现Java编程语言的语义。在这种情况下,引发的异步异常是VirtualMachineError子类的实例。
是否有可能为了记录目的或通知而捕获此类异常(因为我认为这种事情不可恢复)?我怎样才能做到这一点?
回答:
您可以像其他任何异常一样捕获此类异常。唯一的问题是它们可能出现在程序的 任何
位置,因此很难可靠地捕获它们。基本上,您必须将run
所有线程的main
方法和该方法包装在一个try..catch
块中,但是您不能对不受控制的线程(例如Swing
EDT或用于计时器的线程等)进行包装。
Error
通常不建议同时捕获的任何子类,因为JVM可能处于不稳定状态,这可能导致进一步的失败(例如,对于OutOfMemoryError
,您甚至可能没有足够的内存来处理异常)。但是,日志记录将是吸引Error
s
的有效理由。
我建议的解决方案是为此使用未捕获的异常处理程序,方法是将其设置为默认异常处理程序。如果未在代码中捕获任何异常和错误,则在此处理程序中,您将获得所有异常和错误,并且可以尝试记录它们。
以上是 Java异步异常:是否可以捕获它们? 的全部内容, 来源链接: utcz.com/qa/427190.html