Во время выполнения, как я могу ограничить количество потоков Java - PullRequest
9 голосов
/ 09 декабря 2011

Я запускаю программу сборки генома * Trinity, http://trinityrnaseq.sourceforge.net/,, если интересно) на одном из ресурсов XSEDE.Аппаратное обеспечение ограничивает число потоков до 2500, которое программа всегда хочет превысить ... Есть ли простой способ ограничить количество выполняемых потоков?Я попытался -XX:ParallelGCThreads=16, но это, кажется, вводит новые ошибки.

Итак, есть ли команда времени выполнения для ограничения общего числа потоков ??

Ответы [ 2 ]

2 голосов
/ 10 декабря 2011

Использовать Executor или ExecutorService. Делает то, что предлагает Брэгбой, но он встроен в Java.

0 голосов
/ 09 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...