java速率限制逻辑

时间:2013-02-26 19:22:23

标签: java multithreading performance rate-limiting ratelimit

我正在寻求算法来设计java中的多线程应用程序,其中每个线程都将数据写入db。我想控制每秒写入db的记录数。

应用程序获取RPS(每秒记录数)参数并大致生成那些负载。

2 个答案:

答案 0 :(得分:4)

如果你可以使用外部库,guava有一个RateLimiter类可能符合你的要求:

  

速率限制器通常用于限制访问某些物理或逻辑资源的速率。这与信号量形成对比,信号量限制并发访问的数量而不是速率。

答案 1 :(得分:1)

您可以创建一个BlockingQueue个许可对象,并有一个额外的帮助程序线程,每秒一次向队列添加RPS数量的额外许可。编写线程会阻塞队列,并且在成功从队列顶部弹出许可证之前不要写入。