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

我正在研究一个有线程问题的Java应用程序。

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

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

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

如果使用Eclipse及其调试器是一个选项,您可以尝试以下操作:

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

另外

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

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

在此处输入图像描述

免责声明:我公司开发JProfiler