- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在考虑使用它的情况是在多线程应用程序中。假设我的主线程(我们称之为 Prime)需要启动另一个线程(我们称之为 Daemon)在后台执行某些操作。
Daemon 线程可以从 Prime 线程中的多个不同位置启动,如果 Daemon 线程遇到错误,我想知道 Prime 线程中的哪一段代码最初启动了失败的 Daemon 线程。
所以假设在 Prime 线程中我创建了一个 new Exception("some message")
,将其交给Daemon线程(例如在其构造函数中),然后启动Daemon线程。
如果守护进程执行时没有错误,则永远不会使用异常,并且我希望避免支付跟踪堆栈的成本。
另一方面,如果守护进程发生异常,我希望它能够使用来自 Prime 线程的异常以及守护进程自己的异常来帮助调试。来自 Prime 线程异常的堆栈跟踪将指示在何处生成守护进程,来自守护进程的堆栈跟踪将指示在守护进程中的何处遇到问题。
如果我这样做,我是否需要为每种情况支付 Prime 线程的 Exception 的处理成本,或者只是 Daemon 线程遇到错误并随后查看 Prime 线程的 Exception 堆栈的情况?
最佳答案
异常的堆栈跟踪在构造异常时填充。如果您查看 java.lang.Throwable
的构造函数,它们都会看起来 something like :
public Throwable() {
fillInStackTrace();
}
public Throwable(String message) {
fillInStackTrace();
detailMessage = message;
}
等等。其中 fillInStackTrace()
是构建堆栈跟踪的方法。所以是的,无论是否抛出,您都必须支付堆栈跟踪构造的成本。
但是,我预计构建线程的成本会大得多。
关于java - 我可以实例化一个异常并保留它以备后用,并避免 coSTLy 堆栈跟踪(如果它从未抛出)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38776308/
背景 我最近在 merge 期间遇到了一个意外未 merge 的文档文件的问题。 无论出于何种原因,我搞砸了 merge 并有效地删除了文件(和其他几个文件),因为我忘记了它们的存在。 现在我想查看我
我在我的网站上使用旧的 mysql 版本和 php 版本 4。 我的表结构: | orders_status_history_id | orders_id | orders_status_id |
我是一名优秀的程序员,十分优秀!