如果我在无限循环中启动线程会发生什么

时间:2016-05-03 14:01:16

标签: java multithreading infinite-loop

请检查以下代码

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++);
    }
}

让我们忘记对机器性能的影响,我很好奇程序在这种情况下会抛出什么异常/错误?

3 个答案:

答案 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中尝试实验,可能会得到不同的结果。