Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 挂起,在带有断点的线程run()上单步执行_Java_Multithreading_Debugging - Fatal编程技术网

Java 挂起,在带有断点的线程run()上单步执行

Java 挂起,在带有断点的线程run()上单步执行,java,multithreading,debugging,Java,Multithreading,Debugging,在调试多线程程序时,我遇到了一个新问题。下面,我加入了一个测试程序来演示我的问题。本质上,当我在对线程的start()方法的调用上以及在该线程的run()方法上设置断点时,如果我在调试器中“继续”,一切都会好起来。但是,如果我跳过,我可以跳过对start()、println()和join()的调用,然后程序等待执行完成,但这永远不会发生。线程似乎没有执行,线程的run()中的断点永远不会跳闸。我必须退出这个项目 现在,若run()上并没有断点,那个么我是继续还是单步都并没有关系;线程执行。我错过

在调试多线程程序时,我遇到了一个新问题。下面,我加入了一个测试程序来演示我的问题。本质上,当我在对线程的start()方法的调用上以及在该线程的run()方法上设置断点时,如果我在调试器中“继续”,一切都会好起来。但是,如果我跳过,我可以跳过对start()、println()和join()的调用,然后程序等待执行完成,但这永远不会发生。线程似乎没有执行,线程的run()中的断点永远不会跳闸。我必须退出这个项目

现在,若run()上并没有断点,那个么我是继续还是单步都并没有关系;线程执行。我错过了什么

注意,我使用的是香草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());
            }
        }
    }
}

如果您正在使用eclipse进行调试,则应该在调试窗口中看到线程列表。从那里选择另一个线程的stacktrace,您也应该能够调试run方法。

如果您使用eclipse进行调试,您应该在调试窗口中看到线程列表。从那里选择另一个线程的stacktrace,您也应该能够调试run方法。

您确定
run()
中的断点没有被触发吗?在Eclipse中,您需要单击第二个线程以查看它是否已暂停。我怀疑线程已启动,但正在等待您说“继续”

我怀疑,如果在
run()
中没有断点,那么跨过
start()
就可以了。这是第二个断点,它阻止另一个线程运行
sleep()
或返回
join()

在下图中,您可以看到我跳过了
start()
方法,并启动了
Thread-1
。但它已暂停(请参见黄色暂停栏),等待您切换到它并继续


您确定
run()
中的断点没有被触发吗?在Eclipse中,您需要单击第二个线程以查看它是否已暂停。我怀疑线程已启动,但正在等待您说“继续”

我怀疑,如果在
run()
中没有断点,那么跨过
start()
就可以了。这是第二个断点,它阻止另一个线程运行
sleep()
或返回
join()

在下图中,您可以看到我跳过了
start()
方法,并启动了
Thread-1
。但它已暂停(请参见黄色暂停栏),等待您切换到它并继续