Если остановить программу на Java в режиме debug, то она всё равно выполнится до конца

Случайно наткнулся на такую вещь: например есть простенькая программа на 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");
    }
}

Запускаю её в режиме debug и дохожу до строчки System.out.println(" Hello 2");

введите сюда описание изображения

При этом в консоли вижу то, что и ожидал увидеть:

введите сюда описание изображения

А теперь нажму в студии (Intellij IDEA) на красный квадратик (Stop Demo1) и увижу в консоли следующее:

введите сюда описание изображения

т.е. программа не просто остановилась, а она почему-то выполнилась до самого конца, о чём свидетельствуют сообщения в консоле.

Попробую сделать тоже самое, но не в режиме Debug, а в обычном режиме запуска. Для этого немного изменю код (добавлю паузу в 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");
    }
}

Теперь запускаю программу в обычном режиме (Run Demo1). Она дойдёт до строчки с паузой Thread.sleep(60_000L); // пауза 1 минута и встанет на паузу на 1 минуту. В этот момент нажму опять Stop Demo1. В этот раз вывод в консоль такой, как я и ожидаю увидеть:

введите сюда описание изображения

т.е. программу выключили, и она реально выключилась и не стала дорабатывать до конца.

Подскажите, пожалуйста, почему такое странное поведение при остановке программы в режиме debug? Почему в этом случае она не сразу останавливается, а дорабатывает свою логику до конца? Это проблема Java или студии Intellij IDEA ? Можно ли это как-то исправить?

На всякий случай проделал на 2 разных ноутах, с разными версиями jdk и IDEA. Больше всего меня удивило: почему я раньше этого не замечал??!!


Ответы (1 шт):

Автор решения: Дмитрий Рихтер

Пожалуйста, включите опцию "Kill the debug process immediately" в меню Preferences | Build, Execution, Deployment | Debugger чтобы избежать такого поведения.

Но обязательно почитайте про минусы такого решения (есть в источнике)

Источник: https://ru.stackoverflow.com/questions/1021130/Как-прервать-отладку-без-выполнения-дальнейшего-кода-в-intellij-idea?ysclid=m0s28a2quc884401188

→ Ссылка