当其中一个执行线程发生堆栈溢出异常时,JVM是否退出?
答案 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线程死亡,则会自动重新启动。