Рассмотрим следующий статический метод:
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?