我在Centos下运行一个Java应用程序,对如何设置创建的最大线程数感到好奇。请不要混淆在一个给定时间内的最大线程数。
例如,应用程序每天创建和销毁一个线程。在Linux设置的某个地方,我可以设置只能创建250个新线程。然后在第250天之前的某个地方(更早,因为创建了其他线程),它将崩溃(抛出异常),因为它已达到允许的新线程创建的限制。
Linux只强制使用资源,而不强制使用资源(除了总CPU消耗)
您可以在Linux中通过添加一个认可库来定义您自己的ThreadGroup
或Thread
类来实现这一点。这可以以一种不需要更改应用程序的方式添加到JVM中,并且可以使用环境变量来设置限制。
这仍然需要预先编写一些代码,但是JDK是一个开发环境。
您可以创建自己的ThreadFactory
,例如
public class LimitedThreadFactory implements ThreadFactory {
public LimitedThreadFactory(final int limit) {
this.limit = limit;
}
public Thread newThread(final Runnable runnable) {
if (numberOfThreadsCreated >= limit) {
// exit gracefully
}
// create the thread, maybe with new Thread(runnable);
numberOfThreadsCreated++;
}
private final int limit;
private int numberOfThreadsCreated;
}