Ограничение до максимум N одновременных вызовов статического метода в Java - PullRequest
3 голосов
/ 04 октября 2011

Рассмотрим следующий статический метод:

public void static foo() {
  // some heavy operation operating on a shared resource.
}

Предположим, что система становится нестабильной, когда количество одновременных вызовов на foo() превышает десять (10).

Если я в этом сценарии раскручиваю 100 потоков, все забивая foo() запросами, то приложение станет нестабильным, так как мы превысим число одновременных запросов, которые может обработать система.

Одним из способов повысить стабильность цены ограниченного параллелизма является изменение кода на:

public void static synchronized foo() {
  // some heavy operation operating on a shared resource.
}

Теперь система сможет обрабатывать 100 потоков, набирающих foo() запросов, поскольку за один раз будет разрешен foo().

.

Как насчет сценария, к которому я хочу ограничить доступ foo(), чтобы разрешалось только N одновременных запросов? Как проще всего добиться такого ограничения в Java?

Ответы [ 2 ]

10 голосов
/ 04 октября 2011

Используйте Semaphore, инициализированный 10 разрешениями. Получите разрешение в начале метода и отпустите его (в блоке finally) в конце метода.

0 голосов
/ 04 октября 2011

CountDownLatch

Может решить вашу проблему.

Он поставляется в блокирующем и неблокирующем виде.

Редактировать: Исправить URL

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