3

想知道如何使用信号量限制连接(或任何东西)。

所以你可能会想,“这听起来很愚蠢。” 但是,它简化了我的代码,因为它让我可以统一处理有限和无限的情况。

请注意,我不是在寻找有关如何编写类似内容的建议

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

我可以想出几十种方法来使用 if 语句进行这种分叉。

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

4

1 回答 1

1

鉴于 Semaphore 是一个类,而不是一个接口,您将被迫在逻辑中进行某种形式的分支。为了避免在代码周围散布“if (flag)”检查,您可以创建一个用于应用程序的接口,其中包括 Semaphore 类的获取和释放语义。从那时起,提供两种实现,一种本质上是无操作的,不提供任何保护,另一种是委托给 java.util.concurrent.Semaphore 的类 - 从这一点开始,您可以使用依赖注入来确定使用哪个实现。

同样,分支不可避免地必须存在于某个地方,这只是将其移出业务逻辑。

于 2013-03-01T01:21:32.973 回答