Завершается ли JVM, когда в одном из исполняющих потоков возникает исключение stackoverflow? - PullRequest
1 голос
/ 12 февраля 2010

Выходит ли JVM при возникновении исключения переполнения стека в одном из исполняющих потоков?

1 Ответ

3 голосов
/ 12 февраля 2010

Вы можете попробовать это самостоятельно, например, с помощью следующего кода (новый поток создается и запускается и вызывает a(), который вызывает себя рекурсивно, чтобы вызвать переполнение стека, пока другой поток печатает что-то на консоли):

public class SO {

    private static void a() {
        a();
    }

    public static void main(String[] args) throws InterruptedException {
    final Thread t = new Thread( new Runnable() {
        public void run() {
            a();
        }
    });
    t.start();
    while ( true ) {
        Thread.sleep( 2000 );
        System.out.println( "I'm still running @ " + System.currentTimeMillis() );
    }
}

Вы увидите ошибку переполнения стека:

Exception in thread "Thread-1" java.lang.StackOverflowError

и вы также увидите, что печатная нить продолжает счастливо печататься.

Также обратите внимание, что если поток EDT умирает, он перезапускается автоматически.

...