我在Centos下运行Java应用程序,并对如何设置创建的最大线程数的限制的方式感到好奇。请不要在一个给定时间与最大线程数混淆。
例如,每天应用程序创建并销毁一个线程。在Linux设置中的哪个地方我可以设置只能创建250个新线程。然后在第250天之前的某个地方(之前由于创建了其他线程)它将崩溃(抛出异常),因为它已达到创建的新线程的允许限制。
答案 0 :(得分:1)
您可以制作自己的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;
}
答案 1 :(得分:1)
Linux仅强制使用资源,而不是使用的资源(除了总CPU消耗)
您可以通过添加endorsed库来定义自己的ThreadGroup
或Thread
类,从Linux执行此操作。这可以以不需要更改应用程序的方式添加到JVM中,并且可以使用环境变量来设置限制。
这仍然需要预先编写一些代码,但JDK是一个开发环境。