我们正在制作一个类似 Excel 的系统。当我们打开文档并发现不受支持的函数时,我们抛出异常。我们只支持一小部分 excel 函数,这可能会经常发生。问题是当有很多包含不受支持的函数的单元格时,会创建很多很多异常实例。创建那么多异常实例会消耗不可忽视的时间。
我们在异常类中没有任何特殊属性。我们需要知道的是抛出异常的事实。我们刚刚发现错误发生并将单元格标记为错误。
所以我们决定共享一个异常实例,并在需要时抛出它。异常实例可以由多个线程抛出。我怀疑堆栈跟踪可能已损坏,但是,我们没有看到它。我们只是捕获异常,并将相应的单元格标记为错误。
我的问题是: 在这种情况下,共享异常实例是否安全? 好吧,我阅读了以下文章: Java: is Exception class thread-safe? 但语境似乎有所不同。
感谢您提前阅读这么长的问题和回复。
最佳答案
[...] is it safe to share exception instance?
是的,如果你小心的话。
如果你不小心,getStackTrace
例如可能会搞砸。要么确保每个线程都有自己的异常对象,要么覆盖 getStackTrace
并返回一个空数组。
(在某些情况下,JVM 实际上会重用异常实例。如果内存不足,它将重用预分配的 OutOfMemoryError
而不是尝试创建一个新的实例。在这种情况下 getStackTrace
返回一个空数组。)
相关问题:
关于java - 共享异常实例是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11473263/