加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 共享异常实例是否安全

发布时间:2020-12-14 05:48:54 所属栏目:Java 来源:网络整理
导读:我们正在制作类似Excel的系统.当我们打开文档并发现不支持的函数时,我们抛出了异常.我们只支持excel函数的小子集,这可能经常发生.问题是当有很多单元格包含不受支持的函数时,会创建大量的异常实例.创建这些许多异常实例会消耗不可忽视的时间. 我们在异常类中
我们正在制作类似Excel的系统.当我们打开文档并发现不支持的函数时,我们抛出了异常.我们只支持excel函数的小子集,这可能经常发生.问题是当有很多单元格包含不受支持的函数时,会创建大量的异常实例.创建这些许多异常实例会消耗不可忽视的时间.

我们在异常类中没有任何特殊属性.我们需要知道的是抛出异常的事实.我们刚发现错误已发生并将单元格标记为错误.

所以我们决定共享一个异常实例并在需要时抛出它.多个线程可以抛出异常实例.我怀疑堆栈跟踪可能已损坏,但是,我们没有看到它.我们只是捕获异常,并将相应的单元格标记为错误.

我的问题是:
在这种情况下,共享异常实例是否安全?
好吧,我看了下面这篇文章:
Java: is Exception class thread-safe?
但背景似乎有所不同.

感谢您提前阅读这个长期问题和回复.

解决方法

[…] is it safe to share exception instance?

是的,如果你小心的话.

如果你不小心,例如getStackTrace可能搞砸了.确保每个线程都有自己的异常对象,或者覆盖getStackTrace并返回一个空数组.

(在某些情况下,JVM实际上会重用异常实例.如果内存不足,它将重用预先分配的OutOfMemoryError,而不是尝试创建一个新的.在这种情况下,getStackTrace返回一个空数组.)

相关问题:

> How can a preallocated OutOfMemoryError truthfully implement Throwable.getStackTrace if thrown twice?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读