我如何找出谁在Java中创建了线程?
假设以下情况:在一个复杂的插件环境中使用~30 第三方JAR。启动它,运行大量的代码,做一些计算,最后调用start ()。
这个生命周期通常可以正常工作,但每次运行时,一些(非守护进程)线程仍然处于悬空状态。如果每次关闭都是最后一次关闭,那么这就没有问题了,在这种情况下,我可以简单地运行System.exit()。然而,这个循环可能会运行几次,而且每次传递都会产生更多的垃圾。
那我该怎么办?我在Eclipse的Debug视图中看到了线程。我看到了它们的堆栈痕迹,但它们没有任何关于它们的起源的暗示。没有创建者的堆栈跟踪,没有可区分的类名,什么都没有。
有谁知道如何解决这个问题吗?
发布于 2019-12-26 08:06:48
为了进行本地调试,可以尽早将调试器附加到Java应用程序。
在的末尾设置一个不挂起的断点,它将计算并记录如下:
"**" + getName() + "**\n" + Arrays.toString(Thread.currentThread().getStackTrace())
这将输出线程名和线程如何创建(堆栈跟踪),您只需扫描即可。
https://stackoverflow.com/questions/1227275
复制相似问题