1

我试图深入了解 Web 应用程序中的线程问题。我正在使用 Eclipse。问题是当一个线程处于一段非常冗长的代码中的某个阶段时,另一个线程即使它应该走得更远也不能走得更远。它具有阻塞线程的外观。Eclipse 已将其标记为“步进”。由于代码附近没有监视器、信号量、同步块,它为什么停止是没有意义的。

我可以在 eclipse 中使用任何东西来理解线程看起来被阻塞的任何原因吗?

我可以点击暂停按钮,暂停线程。当我单击恢复按钮时,它会返回“步进”,但无法完成这行简单的代码:

long beginTime = System.currentTimeMillis();

谢谢。

4

2 回答 2

3

在 Eclipse 中,将线程标记为“Stepping”意味着您正在单步执行代码,无论是单步执行还是(更有可能)单步执行,并且线程以某种方式被阻塞,或者执行一些 IO,等待同步锁,调用wait()等。Eclipse 没有控制线程,而是等待线程移过块,然后才能继续“步进”。一旦 Eclipse 在下一行控制了线程,您的线程将更改为“暂停”。

例如,在调试以下测试代码时:

// i put a break point here
System.out.println("Foo");
Object lock = new Object();
synchronized (lock) {
    // when I step over this line, my thread is labeled as "Stepping"
    lock.wait();
}
System.out.println("Boo");

一旦我跨过一个阻塞线程的方法,该线程就会被标记为“Stepping”。

在此处输入图像描述

于 2012-07-13T16:53:03.007 回答
1

“单步执行”听起来像是 Eclipse 认为您正在“单步执行代码”并且当前处于该行——也就是说,您正在以调试模式运行。是否在您错过的某处设置了断点?

于 2012-07-13T16:46:48.510 回答