java - 一个 Java 线程是否可以在不中断的情况下查看另一个线程的堆栈?

标签 java multithreading java-8

我有一个运行 Callable 的线程,我有另一个线程,如果它花费的时间太长,它将中断第一个线程,但问题是中断似乎会导致更多问题。那么有没有一种方法可以让我的第二个线程查看运行 Callable 的线程的堆栈,而不会中断它,因此不会干扰它。

最佳答案

是的,您可以使用 Thread.getAllStackTraces()检索所有可见线程的所有堆栈跟踪。这是 Map<Thread,StackTraceElement[]>您可以查询以获取您感兴趣的线程的堆栈跟踪。

如果您有引用 t转到您感兴趣的特定主题,然后

t.getStackTrace()

就是你所需要的。

请注意文档说

Some virtual machines may, under some circumstances, omit one or more stack frames from the stack trace.

根据我的经验,堆栈跟踪被限制为最多 1024 个元素。

关于java - 一个 Java 线程是否可以在不中断的情况下查看另一个线程的堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27547643/

相关文章:

java - 为什么 clone() 方法不能正常工作?

Android:AudioTrack 与多线程

ios - 为什么服务质量设置为后台运行在主线程中?

java-8 - dropwizard 中的反序列化问题,无法将 ImmutableList<String> 转换为字符串列表

java - 并行流中 I/O 代码的 SecurityException

Java错误Java_java_lang_ClassLoader_00024NativeLibrary_load0

java - Eclipse 显示方法未定义,而实际上它已明确定义

多线程可以在单处理器系统上实现吗?

lambda - 使用 Java 8 Stream API 展平 map 并关联值

Java JDBC 驱动程序和 TYPE_FORWARD_ONLY