我试图找出 Web 应用程序中线程问题的根源。我正在使用 Eclipse。问题是,当一个线程处于一段冗长代码的某个阶段时,另一个线程就无法继续前进,即使它应该这样做。它具有阻塞线程的外观。 Eclipse 已将其标记为“步进”。它为什么停止是没有意义的,因为代码附近没有监视器、信号量、同步块(synchronized block)。
我可以使用 Eclipse 中的任何内容来了解线程看起来被阻塞的任何原因吗?
我可以点击暂停按钮来暂停线程。当我单击恢复按钮时,它返回到“单步执行”,但无法完成这行简单的代码:
long beginTime = System.currentTimeMillis();
谢谢。
最佳答案
在 Eclipse 中,将线程标记为“Stepping”意味着您正在单步执行代码,无论是单步执行还是(更有可能)单步执行,并且线程会以某种方式被阻塞,或者执行一些 IO,等待同步锁,调用 wait()
等。Eclipse 不控制线程,而是等待线程移过 block ,然后才能继续“步进”。一旦 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”。
关于java - 试图理解为什么线程会在 Eclipse 中被阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11474769/