我偶然发现了这个东西:例如,Java中有一个简单的程序:
package my.demo1;
public class Demo1 {
public static void main(String[] args) {
System.out.println("Main START");
print_smth();
System.out.println("Main FINISH");
}
private static void print_smth() {
System.out.println(" Hello 1");
System.out.println(" Hello 2");
System.out.println(" Hello 3");
}
}
我在调试模式下运行它并到达线路System.out.println(" Hello 2");
与此同时,我在控制台中看到了我期望看到的内容:
现在,我将单击工作室 (Intellij IDEA) 中的红色方块(停止 Demo1),然后在控制台中看到以下内容:
那些。该程序不仅停止了,而且由于某种原因它运行到了最后,控制台中的消息证明了这一点。
我将尝试执行相同的操作,但不是在调试模式下,而是在正常启动模式下。为此,我将稍微更改一下代码(我将添加 1 分钟的暂停):
package my.demo1;
public class Demo1 {
public static void main(String[] args) throws InterruptedException {
System.out.println("Main START");
print_smth();
System.out.println("Main FINISH");
}
private static void print_smth() throws InterruptedException {
System.out.println(" Hello 1");
Thread.sleep(60_000L); // пауза 1 минута
System.out.println(" Hello 2");
System.out.println(" Hello 3");
}
}
现在我以正常模式运行程序(运行 Demo1)。她将在到达终点线时暂停Thread.sleep(60_000L); // пауза 1 минута
并暂停 1 分钟。这时我会再次按下Stop Demo1。这次控制台输出是我期望看到的:
那些。程序就关掉了,居然关掉了,没有继续敲定。
请告诉我为什么在调试模式下停止程序时会出现这种奇怪的行为?既然如此,为什么不立即停止,而是将逻辑细化到底呢?这是 Java 还是 Intellij IDEA 的问题?有什么办法可以解决这个问题吗?
为了以防万一,我在两台不同的笔记本电脑上做了它,使用了不同版本的jdk和IDEA。最让我惊讶的是:为什么我之前没有注意到这一点?!!