Мне всегда было интересно, почему реализация SmoothRateLimiter в Гуаве должна была синхронизироваться (получить).
Это означает, что, если у меня десятки или сотни RateLimiters, мне понадобятся десятки или сотни заблокированных потоков, что кажется не идеальным.
В идеале мы могли бы иметь что-то вроде
for (Config configsPerRatelimiter: configsPerRatelimiters){
new RateLimiter(configsPerRatelimiter, sharedScheduler, sharedExecutor).submit(myTask)
}
Планировщик (однопоточный) и исполнитель (пул потоков) в этой точке могут быть общими для всех RateLimiters.
Я не смог найти онлайн-реализацию, которая могла бы решить эту проблему без блокировки.