2012-01-16 35 views
8

我有一个很大的项目,也使用很多库。随着jstack我发现,有喜欢的主题:如何找到定时器线程的来源?

Timer-2, Timer-3, Timer-4.... 

和所有jstack可我显示:

java.lang.Thread.State: TIMED_WAITING (on object monitor) 
    at java.lang.Object.wait(Native Method) 
    at java.util.TimerThread.mainLoop(Unknown Source) 
    - locked <0x1a013c24> (a java.util.TaskQueue) 
    at java.util.TimerThread.run(Unknown Source) 

是否有可能寻找到这些线程在那里创建了一个类?

+0

它看起来像一个泳池。问题是要找到谁正在将任务添加到此池中。 – helios 2012-01-16 11:30:38

+0

http://www.java2s.com/Code/JavaAPI/java.lang/ThreadenumerateThreadtarray.htm – user1097489 2012-01-16 12:03:13

回答

2

定时器线程由java.util.Timer创建。

如果您能够使用调试器,您应该能够在Timer构造函数中设置断点并找出源代码。

+0

我想,可能使用AspectJ? – user710818 2012-01-17 15:01:21

1

在调试环境中运行代码,并在Thread构造函数中放置一个断点。

+0

这是一个问题,由其中一个库创建的线程 - 我需要找到哪个。 – user710818 2012-01-16 14:32:24

+0

在调试器下,您将能够看到任何这些库创建线程的时间。 – gliptak 2012-01-16 14:39:51

+0

调试器下的所有代码 - 只有标准库 – user710818 2012-01-16 20:56:54