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

Ank*_*kit 18 java multithreading profiling

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

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

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

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

Ban*_*zen 9

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

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

另外

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


Ing*_*gel 9

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

在此输入图像描述

免责声明:我公司开发JProfiler