在应用程序生命周期内创建的线程池的最大数量是否有限制?

考虑以下代码:

class Test {
    public static void main(String... args) {
        var t = new Test();
        while(true) {
            t.work();
        }
    }
    public void work() {
        ExecutorService executorService = Executors.newFixedThreadPool(10);

        try {
             /* Do work */
        }
        finally {
            executorService.shutdown();
        }
    }
}

在应用程序的生命周期中可以有多少个线程池(不是同时)是否有限制。

我尝试查看源代码并运行此测试一段时间,但似乎没有限制。一旦线程池计数器溢出会发生什么?

回答

(在 Java 11 中)对线程池的数量没有特定限制,并且没有可能溢出的线程池计数器。

线程有一个 ID / 序列号,但由于它的类型是,long并且在Thread创建新线程时只会增加 1 ,因此溢出不是实际问题1

但是,线程……尤其是活动线程2 ……使用大量内存。因此,您不能同时存在无限数量的活动线程或线程池。


1 - 做数学。应用程序创建 2^63 个线程需要多长时间...假设有足够的内存等。
2 - 已启动但尚未终止的线程。


以上是在应用程序生命周期内创建的线程池的最大数量是否有限制?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>