可以并行执行Java Object非同步方法的最大线程数是多少?

时间:2013-01-17 12:57:28

标签: java multithreading

有最大值吗?可能是因为底层操作系统每个进程只允许'X'个线程数等?

3 个答案:

答案 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数量,所以通常不太可能有这样的数字。