У вас неверный синтаксис.Оно должно быть:
ExecutorService es = Executors.newFixedThreadPool(200);
for (int i = 0; i < 200; i++) {
if (check) {
es.submit(() -> callTrueAPI());
} else {
es.submit(() -> callFalseAPI());
}
}
es.shutdown();
После shutdown
пул потоков будет продолжаться, пока все задачи не будут выполнены .Если вы хотите подождать, пока задачи не будут выполнены, позвоните awaitTermination
после вызова shutdown
.
Существует проблема с этим подходом.Вы фактически создаете пул с 200 потоками, а затем уничтожаете потоки (затем пул закрывается).Это дорого как в процессоре, так и в памяти.Если вы хотите сделать это более эффективно (с точки зрения ресурсов на стороне клиента):
- Используйте меньший пул потоков (!)
- Перезапустите пул ... хотя это потребуетиспользуя другой метод для ожидания выполнения задач.
Предполагая, что вызовы REST направляются в другую службу / процесс, вы, вероятно, можете запустить больше потоков, чем у вас есть ядер, ипусть они идут параллельно.Тем не менее, удаленная служба, вероятно, имеет ограничение на число одновременных запросов, которые она может выполнить, поэтому 200 запросов подлежат «резервному копированию» во входной очереди сервера, что может привести к тайм-аутам запросов, ошибкам 5xx и так далее.Следовательно, одновременное выполнение 200 запросов вряд ли будет хорошо для общей пропускной способности.
И если вы делаете это как стресс-тест, есть более реалистичные способы сделать это;см. ответ @ Karol.