Java 挂起,在带有断点的线程run()上单步执行
在调试多线程程序时,我遇到了一个新问题。下面,我加入了一个测试程序来演示我的问题。本质上,当我在对线程的start()方法的调用上以及在该线程的run()方法上设置断点时,如果我在调试器中“继续”,一切都会好起来。但是,如果我跳过,我可以跳过对start()、println()和join()的调用,然后程序等待执行完成,但这永远不会发生。线程似乎没有执行,线程的run()中的断点永远不会跳闸。我必须退出这个项目 现在,若run()上并没有断点,那个么我是继续还是单步都并没有关系;线程执行。我错过了什么 注意,我使用的是香草eclipse调试Java 挂起,在带有断点的线程run()上单步执行,java,multithreading,debugging,Java,Multithreading,Debugging,在调试多线程程序时,我遇到了一个新问题。下面,我加入了一个测试程序来演示我的问题。本质上,当我在对线程的start()方法的调用上以及在该线程的run()方法上设置断点时,如果我在调试器中“继续”,一切都会好起来。但是,如果我跳过,我可以跳过对start()、println()和join()的调用,然后程序等待执行完成,但这永远不会发生。线程似乎没有执行,线程的run()中的断点永远不会跳闸。我必须退出这个项目 现在,若run()上并没有断点,那个么我是继续还是单步都并没有关系;线程执行。我错过
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());
}
}
}
}
如果您正在使用eclipse进行调试,则应该在调试窗口中看到线程列表。从那里选择另一个线程的stacktrace,您也应该能够调试run方法。如果您使用eclipse进行调试,您应该在调试窗口中看到线程列表。从那里选择另一个线程的stacktrace,您也应该能够调试run方法。您确定
run()
中的断点没有被触发吗?在Eclipse中,您需要单击第二个线程以查看它是否已暂停。我怀疑线程已启动,但正在等待您说“继续”
我怀疑,如果在run()
中没有断点,那么跨过start()
就可以了。这是第二个断点,它阻止另一个线程运行sleep()
或返回join()
在下图中,您可以看到我跳过了start()
方法,并启动了Thread-1
。但它已暂停(请参见黄色暂停栏),等待您切换到它并继续
您确定
run()
中的断点没有被触发吗?在Eclipse中,您需要单击第二个线程以查看它是否已暂停。我怀疑线程已启动,但正在等待您说“继续”
我怀疑,如果在run()
中没有断点,那么跨过start()
就可以了。这是第二个断点,它阻止另一个线程运行sleep()
或返回join()
在下图中,您可以看到我跳过了start()
方法,并启动了Thread-1
。但它已暂停(请参见黄色暂停栏),等待您切换到它并继续