在 Java 应用程序中查找线程创建源

2022-09-02 21:57:47

我正在开发一个Java应用程序,该应用程序存在线程问题。

在附加了 Netbeans 探查器的情况下使用这些应用程序一段时间后,我可以看到创建了多个线程。他们中的大多数都以一些完成。我只能找到应用程序中使用的SwingWorkers。.5 seconds

此外,探查器显示的大多数线程都是普通线程,而不是 SwingWorkers。除非这些线程是由SwingWorker间接创建的,否则我怀疑应用程序使用的某个库正在创建它们。

现在我想删除这个问题。但是我找不到一种方法来确定线程创建的来源。如果您可以建议一些其他的探查器/工具,通过这些工具,我可以找到线程创建的源(方法)。


答案 1

如果可以选择使用 Eclipse 及其调试器,则可以尝试以下操作:

  • 将代码导入到 Java 项目中。
  • Ctrl-Shift-T(打开类型),输入“线程”。将打开 Thread 类的二进制源代码编辑器。
  • 在大纲视图中选择所有线程构造函数,使用上下文菜单“切换方法断点”。这将为构造函数创建断点。
  • 运行和调试。

或者

您可以获得Yourkit Java profiler,它也可用于评估。它可以显示在应用程序中创建的线程,包括它们的堆栈跟踪(也在线程完成后)。它不会显示线程的创建位置,但线程的堆栈跟踪可能会为您提供有关所涉及的库的一些线索。


答案 2

JProfiler可以做到这一点。线程监视器视图显示创建线程的堆栈跟踪 - 如果 CPU 记录当时处于活动状态:

enter image description here

免责声明:我公司开发JProfiler


推荐