Вероятно, вам следует настроить контейнер приложения так, чтобы он ограничивался количеством потоков запросов, которое вы хотите.
За исключением этого, Semaphore
- идеальный инструмент. Используйте метод tryAcquire()
и обязательно поместите соответствующий выпуск в блок finally
, например:
if (permits.tryAcquire(7, TimeUnit.SECONDS))
try {
/* Do your computation. */
compute();
} finally {
permits.release();
}
else
/* Respond with "Too busy; try later," message. */