java - 使用信号量管理连接池 (Java)

标签 java connection-pooling semaphore

我维护一个大小为 N 的连接池,并使用大小为 N 的信号量来控制对池中每个连接的访问​​。应用程序在尝试发送数据时获取信号量,并在接收响应或套接字超时时释放信号量。

连接池中有一个后台线程正在运行,它为每个连接发送定期的心跳。现在,如果心跳失败,则该连接将关闭,并会努力创建一个新连接。我想确保的是,当连接在池中打开和关闭时,我希望增加和减少许可,以便它直接反射(reflect)池中的连接数量。我可以使用reducePermits(m) API 减少许可,但要增加许可,唯一的方法是在信号量上多次调用release()(即使没有获取任何许可)吗?

最佳答案

是的,release()release(int) 是用于增加可用许可数量的方法。 reducePermits(int) 存在的唯一原因是提供一种非阻塞方式来减少可用许可的数量。无论如何,release 都是非阻塞的,因此increasePermits 函数将是完全多余的。

关于java - 使用信号量管理连接池 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6702276/

相关文章:

java - Jprofiler + Vaadin + Intellij Idea : program arguments

java - java处理中如何一键来回改变背景颜色?

java - 如何使用 MusicKit SDK for Android 播放歌曲

java 男女通用浴室

c - 使用 POSIX 计数信号量作为二进制信号量

java - 用于 URL、Java 的 UTF-8

java - 如何在运行时从连接池声明中获取用户名

java - 大小有限的分布式池

java - 线程池连接 vs 单例设计模式获取单个数据库连接

linux - Linux 中的信号量和共享内存