我目前的代码面临着一个复杂的问题(这是相当巨大的)。为了实现我的任务,我们不得不在100-120个方法调用之间进行多次方法调用(请不要问我为什么要这样做,它是完全解耦的实现)。更详细地说,这是一个Java swing应用程序。当我执行10次动作时,大约3-4次迭代完成动作所需的时间非常高(大约300毫秒)。我尝试添加更多日志,以找出哪个方法调用花费了更多时间。我能够注意到的是,尖峰并不总是在一个地方,当我添加更多的日志时,我看到尖峰被推到了上面一点,当我删除一些代码时,尖峰移动到了下面一点。这清楚地表明一些后台线程实际上阻塞了我的执行(可能是由于线程切片或线程饥饿),任何原因都可能是原因。说到问题,我不知道是哪个后台线程打断了我。所以我想知道是否有任何方法(通过Java运行时参数)让我可以在控制台中打印哪个线程暂停了,哪个线程正在恢复执行?
发布于 2016-07-17 02:43:55
要知道调用方法的线程名称,请尝试以下命令:
public void myMethod(){
String threadName = Thread.currentThread().getName();
System.out.println("Thread name : " + threadName);
}发布于 2016-07-17 03:17:15
我所做的是有一个监控线程,它定期检查延迟敏感型任务是否及时完成。如果没有,它会打印线程(可能还有其他感兴趣的线程)的堆栈跟踪。这对于跟踪模糊的延迟抖动很有用。
发布于 2016-07-17 03:56:23
Eclipse IDE的调试器能够显示一个线程正在等待另一个线程(debugging Java synchronization)。您必须在正确的时间点停止执行,这样才能看到正在发生的事情。
https://stackoverflow.com/questions/38409655
复制相似问题