在尝试调试多线程程序时,我遇到了一个新问题。下面,我包含了一个测试程序来演示我的问题。本质上,当我在对线程的 start() 方法以及该线程的 run() 方法的调用上设置断点时,如果我在调试器中“继续”,一切都会好起来的。但是,如果我跳过,我可以跳过对 start()、println() 和 join() 的调用,之后程序会等待执行完成,但这永远不会发生。线程似乎没有执行,我在线程的 run() 中的断点从不跳闸。我必须退出程序。
现在,如果 run() 上没有断点,我继续还是单步都没有关系;线程执行。我在这里想念什么?
请注意,我正在使用 vanilla eclipse 调试。
public class Test {
public static void main(String[] args) {
try {
Thread myThread = new Test().new TestThread();
long threadStartTime = System.currentTimeMillis();
myThread.start(); // **********Breakpoint 1
System.out.println("Thread started");
myThread.join();
long threadExecutionTime = System.currentTimeMillis() - threadStartTime;
System.out.println("Thread finished execution in " + threadExecutionTime + " milliseconds.");
} catch(InterruptedException e) {
System.err.println(e.getMessage());
}
}
private class TestThread extends Thread {
@Override
public void run() { // **********Breakpoint 2
try {
sleep(5*1000);
} catch(InterruptedException e) {
System.err.println(e.getMessage());
}
}
}
}