gpt4 book ai didi

java - 如何知道当前 JVM 允许的最大可运行线程数?

转载 作者:太空宇宙 更新时间:2023-11-04 08:07:33 24 4
gpt4 key购买 nike

我有一个在多个不同环境中运行的多线程应用程序,我认为有时环境会限制可以同时运行的线程总数。特别是,我认为其中一个系统只允许单个线程运行,因此多线程没有任何好处。有什么简单的方法可以判断这种情况何时发生?

ExecutorService exec = Executors.newFixedThreadPool(4);
TestRunnable tr = new TestRunnable();
for ( int i = 0; i < 20; i++ ) {
try {
exec.execute(sr);
} catch (Exception E) {
}
}

最佳答案

I have a multi-threaded application that runs in several different environments and I think that sometimes the environment limits the total number of threads that can be run at the same time.

是的,环境确实限制了实际上可以同时运行的线程数量。具体来说:

  • 硬件同时运行的线程数不能多于物理机或虚拟机上可用的处理器(或超线程)数。
  • 各种操作系统限制可能会阻止您使用所有可用资源;例如基于 ulimit 和 cgroup 的限制。

  • 如果系统繁忙,您的 JVM 可能会与其他应用程序进程竞争。

  • 您的 Java 代码中可能存在并发瓶颈;例如一个线程对某些数据结构的锁定经常会阻碍其他线程。

但是,JVM 本身不会人为地限制您。

您可以使用Runtime.availableProcessors找出可用处理器的名义数量。方法。

<小时/>

注意:“可运行”线程的数量与“正在运行”线程的数量不同;即可以同时物理执行指令的线程数量。 “可运行”线程的数量是可以安排执行的线程数量...如果有足够的可用处理器。

关于java - 如何知道当前 JVM 允许的最大可运行线程数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11837675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com