使用Java Semaphore类的漏桶状速率限制

时间:2013-02-26 18:31:59

标签: java semaphore throttling

我正在考虑使用Java Semaphore类实现与leaky bucket algorithm非常相似的东西,并且想知道它是否适合。目标是限制对共享资源的写入速率,并且我将有一个线程定期向信号量释放许多许可,并且工作线程池试图获取与他们想要的项目大小一样多的许可证写。

我担心的是Semaphore是否在幕后使用单个int实现,或者它的空间使用量是否与活动许可证的数量呈线性关系(使用某种许可证队列实现或如果空间(以及时间)是线性的,那么我显然想避免谈论以字节为单位的速率。如果它只是一个int,除了非常高的费率溢出之外,我应该没有其他问题(在这种情况下,我想要一个long - 支持Semaphore

有人有什么想法吗?

1 个答案:

答案 0 :(得分:2)

来自http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html

  

没有使用实际的许可证对象;信号量只是保留可用数量并相应地采取行动。

我查看了源代码,它确实由int支持(不是long)。