为什么我的无限线程生成尝试在4处停止?

8

我有一段Java 8的简单代码:

class ThreadTest {
    void threadTest() {
        new Thread(this::threadTest).start();
        System.out.println(Thread.activeCount());
    }

    public static void main(String[] args) {
        new ThreadTest().threadTest();
    }
}

我本以为会看到很大的数字被打印出来。但是控制台上我只看到了:

4
4
4
4
4
4
4
4
4

我说也许出于某些原因我无法看到别人,我修改了以下代码:

class ThreadTest {
    void threadTest() {
        new Thread(this::threadTest).start();
        if (Thread.activeCount() > 4) {
            System.out.println(Thread.activeCount());
        }
    }

    public static void main(String[] args) {
        new ThreadTest().threadTest();
    }
}

现在没有任何东西被打印出来。

我错过了什么?


4
我的猜测是,您的计算机有4个内核,每次最多只能运行4个线程。 - Pezo
7
当一个线程结束时(当到达threadTest()的结尾时),它会被移除。 - Michael Butscher
@MichaelButscher 我明白了,你说得完全正确。在打印语句后面我加了一个Thread.sleep(50000),然后很快就得到了像4000这样的值。然后我的电脑重启了...很奇怪... - Koray Tugay
1个回答

5

当你的线程执行完毕时(在你的情况下,即threadTest()方法的结尾),它就不再是一个活跃的线程了。

如果你在这个方法中添加了过长的Thread.sleep,你会看到活跃线程数量进一步增加。


1
你只是把@MichaelButscher的评论和我的回复结合起来了吗?我猜这已经足够好了,这里有一个绿色的勾给你。 - Koray Tugay
那个评论应该被发布为答案,+1 为转换努力加油 :) - Sampo Sarrala - codidact.org

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接