我维护一个大小为 N 的连接池,并使用大小为 N 的信号量来控制对池中每个连接的访问。应用程序在尝试发送数据时获取信号量,并在接收响应或套接字超时时释放信号量。
连接池中有一个后台线程正在运行,它为每个连接发送定期的心跳。现在,如果心跳失败,则该连接将关闭,并会努力创建一个新连接。我想确保的是,当连接在池中打开和关闭时,我希望增加和减少许可,以便它直接反射(reflect)池中的连接数量。我可以使用reducePermits(m) API 减少许可,但要增加许可,唯一的方法是在信号量上多次调用release()(即使没有获取任何许可)吗?
最佳答案
是的,release()
和 release(int)
是用于增加可用许可数量的方法。 reducePermits(int)
存在的唯一原因是提供一种非阻塞方式来减少可用许可的数量。无论如何,release 都是非阻塞的,因此increasePermits 函数将是完全多余的。
关于java - 使用信号量管理连接池 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6702276/