我一直在运行测试,将 Java FixedThreadPool 的大小修改为变量。通过研究FixedThreadPool,您似乎应该能够在内存允许的情况下在池中拥有尽可能多的线程。
我的 i7 4 核机器可以轻松处理超过 4000 个“正常”线程,但将线程池大小更改为 1024 以上会使我的测试陷入死锁。同样的 1024 线程池死锁也发生在 M1 MacBook 和 2 核 MacBook Air 上。线程池是否有设定的最大值?对于尺寸,在此之前,所有机器都可以正常工作。
最佳答案
该限制不驻留在 jvm 内存中,而是驻留在操作系统中每个用户线程(进程)的限制中。 在 Linux 或 Mac OS 中,您可以通过 ulimit -u 进行检查。 在这里您可以找到更多信息 Maximum number of threads per process in Linux?
当您使用 Executors.newFixedThreadPool( nb ) 创建 ThreadPoolExecutor 时,不会创建任何线程,并且每个线程只需要少量内存(如果实现使用 LinkedList 或映射来保留 Worker(线程),则内存量可能为零)
其他有用的信息在这里 Maximum number of threads in a JVM?
关于java - Java固定线程池有最大尺寸参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65642980/