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

时间:2012-05-11 17:35:25

标签: java multithreading profiling

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

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

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

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

2 个答案:

答案 0 :(得分:9)

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

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

或者

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

答案 1 :(得分:7)

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

enter image description here

免责声明:我公司开发JProfiler