有最大值吗?可能是因为底层操作系统每个进程只允许'X'个线程数等?
答案 0 :(得分:4)
这取决于您正在使用的CPU,操作系统,其他进程正在执行的CPU,您正在使用的Java版本以及其他因素。我见过Windows服务器有>在关闭机器之前6500螺纹。当然,大多数线程都没有做任何事情。一旦机器击中大约6500个线程(用Java),整个机器开始出现问题并变得不稳定。
我的经验表明,Java(最新版本)可以愉快地使用尽可能多的线程,而计算机本身可以毫无问题地使用它。
当然,你必须有足够的内存,你必须启动Java,有足够的内存来完成线程正在做的所有事情,并为每个线程都有一个堆栈。任何具有现代CPU(最新几代AMD或Intel)和1-2G内存(取决于操作系统)的机器都可以轻松支持具有数千个线程的JVM。
如果您需要比此更具体的答案,最好的选择是分析。
答案 1 :(得分:3)
总有一些最大值,但它是什么以及它是如何确定的变化很大。除其他外,限制可以由JVM上的总内存分配池限制或显式OS级别限制隐式强加。绕过内存限制的一种方法是配置具有较低堆栈大小的JVM。
请参阅this answer以了解如何在Linux上确定限制。
答案 2 :(得分:2)
在Linux上我看到最多大约32000,之后无法创建新线程。如果你有CPU绑定任务,最佳线程数可能是你拥有的CPU数量,所以通常不太可能有这样的数字。