限制JVM使用的线程数

abc*_*abc 7 java linux multithreading jvm

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

编辑我添加更多指定的信息,因为有些人没有得到我的观点.

  1. 一些随机的人发给我一个我的电脑要执行的代码
  2. 代码必须在最多k个线程内执行
  3. 一切都必须自动化 - 像SPOJ,ideone等一样工作.

Rae*_*ald 6

在Linux上,您可以作为单独的用户运行该程序,并使用shell命令ulimit -u nprocs限制该用户的线程(进程)数.如果尝试超过限制,JVM将抛出一个OutOfMemoryError.

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

 NPROCS=100 # for example
 NICENESS=13 # for example
 ulimit -u $NPROCS
 nice -n $NICENESS java ...
Run Code Online (Sandbox Code Playgroud)

nice以这种方式使用应该降低所有线程的优先级,但目前尚不清楚它是否适用于Linux.


Sur*_*tta 0

AFAIK,限制纯粹取决于操作系统而不是 JVM。

您可以通过 Executor 服务监控它们

一种 Executor,提供管理终止的方法以及可以生成 Future 来跟踪一个或多个异步任务进度的方法。

ExecutorService pool = Executors.newFixedThreadPool(n);
Run Code Online (Sandbox Code Playgroud)