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

3hvapo4f  于 2021-07-14  发布在  Java
关注(0)|答案(2)|浏览(394)

考虑以下代码:

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

在应用程序的生存期内(不是同时)可以有多少线程池是有限制的。
我试着查看源代码,并运行了一段时间的测试,但似乎没有限制。一旦线程池计数器溢出,会发生什么?

r6hnlfcb

r6hnlfcb1#

(在Java11中)线程池的数量没有特定的限制,也没有可能溢出的线程池计数器。
线程有一个id/序列号,但由于其类型是 long 当一个新的 Thread 溢出不是一个实际的问题。
但是,线程。。。尤其是活丝2。。。使用大量内存。因此,不能同时存在无限数量的活动线程或线程池。
1-算算。一个应用程序创建2^63个线程需要多长时间。。。假设有足够的内存等。
2-已启动但尚未终止的线程。

up9lanfz

up9lanfz2#

没有限制。但是线程占用自己的资源。因此,问题在于服务器中有多少资源(cpu、内存等)可用&有多少资源分配给jvm。如果线程数耗尽了所有资源,jvm将崩溃。

相关问题