请检查以下代码
public class InfiniteThreads {
public static int cnt=0;
public static void main(String[] args) {
while (true) {
new MyThread().start();
}
}
}
class MyThread extends Thread{
@Override
public void run() {
sleep(100000);
System.out.println(InfiniteThreads.cnt++);
}
}
让我们忘记对机器性能的影响,我很好奇程序在这种情况下会抛出什么异常/错误?
答案 0 :(得分:11)
你的Threads
里面没有无限循环 。您正在创建不停止的线程,但它们只会递增并打印一行。之后他们就死了。
答案 1 :(得分:3)
正如Murat所解释的那样,你正在创建短线程,如果你需要来获得StackOverflowException
:
class MyThread extends Thread{
@Override
public void run() {
this.run();
}
}
答案 2 :(得分:0)
官方答案应该是,"行为未定义。"
Java语言规范(JLS)并没有说明有多少线程太多,并且它没有说明当你的程序达到极限时会发生什么。
java.lang.Thread
的javadoc建议可以抛出OutOfMemoryError。
在某些平台上,为stackSize参数指定更高的值可能允许[...]。同样,指定较低的值可能允许并发存在更多线程而不会抛出OutOfMemoryError(或其他内部错误)。
在尝试在IBM JVM中创建新线程时,我看到了OutOfMemoryError,但如果您在某个不同的JVM中尝试实验,可能会得到不同的结果。