有点非正统的情况 - 本质上我有线程监视线程B.如果线程A检测到线程B负责的一个周期性任务(线程B不是ThreadPoolExecutor
的一部分,它是MINA的线程之一)已经过时,线程A会报告一个错误。所以我得到这些错误,并想知道线程B堵塞的位置。所以线程A调用线程B getStackTrace()
并打印堆栈看起来很聪明,这样我就可以看到什么愚蠢的活动B被阻塞了。是Thread.getStackTrace()线程安全吗?
在实践中,我会很轻松地做到这一点,因为如果任务没有运行,线程B的堆栈在一段时间内没有改变,因为B被阻塞。但是在理论上,有时在线程A尝试获取堆栈跟踪时,线程B的堆栈将会发生变化。所以我想知道这是否是一个线程安全操作。
为什么不从外部或像VisualVM这样的工具使用'jps'? –
当错误发生时需要抓住这一点,据推测(并且以我迄今为止的经验),线程不会长时间停滞。 – djechlin