java - 试图理解为什么线程会在 Eclipse 中被阻塞?

标签 java eclipse multithreading

我试图找出 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”。

enter image description here

关于java - 试图理解为什么线程会在 Eclipse 中被阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11474769/

相关文章:

java - 适配器中的数组大小为 0 > MainActivity 中的数组大小为 0?

java - 线程 "main "中的 java.lang.NoSuchMethodError 主异常和错误 : Main method not found in class 之间有什么区别

c++ - 从 Eclipse 获得可分发程序需要做什么?

java - 使用 Spark DataFrame 发展模式

Eclipse Maven 构建错误

windows - Eclipse 将文件清空

java - 我应该在 Java 中使用哪个并发队列实现?

java从多个线程接收并连接文件

c# - 在多个线程之间拆分循环

java - hashCode() 的默认行为