Java无限信号量

3

想知道如何使用信号量(Semaphore)限制连接数或其他任何内容?

也许你会认为这听起来很愚蠢。但是,它可以简化我的代码,因为它让我可以统一处理有限和无限的情况。

请注意,我不是在寻求如何编写类似于...的建议。

if(limited) {
    semaphore.acquire();
}

我可以想出数十种使用if语句进行分支的方法。

更具体地说,我正在寻找一个Apache Commons或Java解决方案。这只是一个简单的情况,我可以编写自己的简单类来解决它,但当有广泛可用的实用程序解决方案时,我更喜欢使用这些。


2
“Connections” 可能不是正确的术语。但是,有什么阻止您创建一个拥有 Integer.MAX_VALUE 许可的信号量?这足够大以模拟“无限”。 - Perception
在我的应用程序中,确实存在感知问题,事实上,通常情况下运行40亿次操作并不是不可能的(金融交易、Gmail或Yahoo邮件等)。 - djechlin
1个回答

1
考虑到Semaphore是一个类而不是接口,你将被迫在逻辑中进行某种形式的分支。为了避免在代码中到处添加“if (flag)”检查,您可以为应用程序创建一个包括Semaphore类的获取和释放语义的接口。从那时起,提供两个实现,一个基本上是无操作的,根本不提供任何保护,另一个类委托给java.util.concurrent.Semaphore-从这一点开始,您就可以使用依赖注入来确定要使用哪个实现。
同样,分支必须生存在某个地方,这只是将其移到业务逻辑之外。

我编辑了我的问题,以便更具体地说明我希望实现的约束条件。 - djechlin
我必须说,Perception对你的问题的评论可能是最合理的答案。你想要使用一个Semaphore,它可以以不提供资源保护的方式运行 - 对于这种特定的用例,不太可能有“广泛可用的解决方案”。祝你好运! - user1898811

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接