java - Java固定线程池有最大尺寸参数吗?

标签 java multithreading jvm threadpool

我一直在运行测试,将 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/

相关文章:

java - 在 SpannableStringBuilder 和 CharSequence 之间进行转换

c - 如何并行运行该函数?

c - 向 pthread_create() 发送多个参数

multithreading - Swift 中的线程间通信?

java - 有多少内存被垃圾回收?

java - 如何使用 Spring security 保护包含的页面

java - Android异步USB读取到ByteBuffer,但无法确定大小

java - 在固定超时内缓存单个对象的最佳方法是什么?

multithreading - 从另一个线程修改局部变量是什么意思?

java - JVM 核心线程