当其中一个执行线程发生堆栈溢出异常时,JVM是否会退出?

时间:2010-02-12 20:35:24

标签: java exception jvm stack-overflow

当其中一个执行线程发生堆栈溢出异常时,JVM是否退出?

1 个答案:

答案 0 :(得分:3)

您可以自己尝试使用,例如使用以下代码(生成并启动新线程并调用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线程死亡,则会自动重新启动。