2

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

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

有人有想法么?

4

1 回答 1

2

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

没有使用实际的许可对象;Semaphore 只是对可用数量进行计数并采取相应措施。

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

于 2013-02-26T18:43:14.220 回答