Вы можете использовать пользовательскую очередь, которая запускается как отдельный процесс, который обрабатывает ограничение количества потоков.Преимущество этого в том, что вы можете либо ограничить потоки, либо продолжать добавлять количество потоков.Вероятно, у вас будет класс addToQueue(Thread t)
и, следовательно, потребитель, потребляющий все эти потоки.Очередь будет знать, сколько потоков активно запущено.Процесс-демон по желанию запустит метод consume()
этой очереди, если потоки находятся в пределах диапазона.И после того, как каждый поток завершает или завершает свою работу, он отправляет отчет в очередь.Поддерживаемая вами очередь может быть приоритетной, если вы чувствуете, что приоритет должен быть у запущенных задач.Это не только устраняет зависимость от JVM, но и делает вашу программу более чистой.