gpt4 book ai didi

java - Thread.getStackTrace() 是线程安全的吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:51:55 26 4
gpt4 key购买 nike

有点不正统的情况 - 基本上我有线程 A 监视线程 B。如果线程 A 检测到线程 B 负责的周期性任务之一(线程 B 不是 ThreadPoolExecutor 的一部分,它是MINA 的线程之一)已经过时,线程 A 报告了一个错误。所以我收到了这些错误,想知道线程 B 卡在哪里。因此,线程 A 调用线程 B getStackTrace() 并打印堆栈似乎很明智,这样我就可以看到 B 被什么愚蠢的 Activity 卡住了。

在实践中,我会稍微轻松地执行此操作,因为如果任务未运行,则线程 B 的堆栈很可能在相当长的一段时间内没有更改,因为 B 被阻塞了。但在理论上,有时在实践中,当线程 A 试图获取其堆栈跟踪时,线程 B 的堆栈将发生变化。所以我想知道这是否是线程安全操作。

最佳答案

查看Thread 的源代码,似乎getStackTrace() 使用了private static native dumpThreads() 方法。 Thread.getAllStackTraces()使用了同样的方法根据其 javadoc,这是线程安全的:

The threads may be executing while this method is called. The stack trace of each thread only represents a snapshot and each stack trace may be obtained at different time. A zero-length array will be returned in the map value if the virtual machine has no stack trace information about a thread.

关于java - Thread.getStackTrace() 是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13498041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com