java - 限制 JVM 使用的线程数

标签 java linux multithreading jvm

如何限制某人可以创建的线程数量?我所做的是运行某人的代码(类似于 ideone),并希望限制他可以生成的线程数。怎么做?一些 jvm 设置或其他东西?

编辑 我添加了更多具体信息,因为有些人没有理解我的观点。

  1. 一些随机的人给我发送了我的计算机将要执行的代码
  2. 代码必须在最多使用 k 个线程内执行
  3. 一切都必须自动化 - 像 SPOJ、ideone 等一样工作。

最佳答案

在 Linux 上,您可以以单独的用户身份运行该程序,并使用 shell 命令 ulimit -u nprocs 来限制该用户的线程(进程)数量。如果试图超过限制,the JVM will throw an OutOfMemoryError .

但是为什么要这样做呢?您是否担心程序会占用计算机的所有 CPU 资源?如果是这样,您可能需要考虑以较低的调度优先级运行 JVM,使用 nice ,因此其他进程将优先使用 CPU:

 NPROCS=100 # for example
 NICENESS=13 # for example
 ulimit -u $NPROCS
 nice -n $NICENESS java ...

以这种方式使用nice应该降低所有线程的优先级,但是it is not clear that it does so for Linux .

关于java - 限制 JVM 使用的线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17341883/

相关文章:

python - 如何将程序输出的数字以空格分隔放入 Bash shell 脚本中的数组中?

c++ - 转换 .wav 文件中的 RTP 序列负载

c++ - 线程连接问题

java - .tailSet 据说返回 NavigableSet,但似乎返回 TreeSet

Java 反射和泛型 - 参数化类型信息丢失 "extends"

javascript - 如何在 linux 或 windows 上将 java 导出到 jar

c - 启用可取消性时,pthread_setcancelstate 函数是否为取消点

c# - getter setter 文本字段 JAVA GUI

java - 继承,每一步之后发生了什么

c# - System.Timers.Timer/Threading.Timer 与 Thread with WhileLoop + Thread.Sleep 用于周期性任务