我正在考虑使用Java Semaphore
类实现与leaky bucket algorithm非常相似的东西,并且想知道它是否适合。目标是限制对共享资源的写入速率,并且我将有一个线程定期向信号量释放许多许可,并且工作线程池试图获取与他们想要的项目大小一样多的许可证写。
我担心的是Semaphore
是否在幕后使用单个int
实现,或者它的空间使用量是否与活动许可证的数量呈线性关系(使用某种许可证队列实现或如果空间(以及时间)是线性的,那么我显然想避免谈论以字节为单位的速率。如果它只是一个int
,除了非常高的费率溢出之外,我应该没有其他问题(在这种情况下,我想要一个long
- 支持Semaphore
)
有人有什么想法吗?
答案 0 :(得分:2)
来自http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html:
没有使用实际的许可证对象;信号量只是保留可用数量并相应地采取行动。
我查看了源代码,它确实由int
支持(不是long
)。