Алгоритм Token Bucket - это способ ограничения загрузки или пропускной способности загрузки.
Вы должны прочитать эту статью : она объясняет использование этого алгоритма.
Использование Guava RateLimiter :
// rate = 512 permits per second or 512 bytes per second in this case
final RateLimiter rateLimiter = RateLimiter.create(512.0);
while (file.hasMoreLines()) {
String line = file.readLine();
for (int i = 0; i < line.length(); i+=128) {
byte[] bytes = line.substr(i, i+128).getBytes();
rateLimiter.acquire(bytes.length);
outputStream.writeBytes(bytes);
}
}
Как объяснено в документации по Guava:
Важно отметить, что количество запрошенных разрешений никогда не влияет на регулирование самого запроса (вызов для получения (1) и вызов для получения (1000) приведут к точно такой же регулировке, если таковые имеются), но это влияет на удушение следующего запроса. То есть, если дорогостоящее задание прибывает в незанятый RateLimiter, оно будет предоставлено немедленно, но это следующий запрос, который будет испытывать дополнительное удушение, таким образом оплачивая стоимость дорогого задания.