我维护一个大小为N的连接池,并且具有大小为N的信号量控制对池中每个连接的访问。应用程序在尝试发送数据时获取信号量,并在收到响应或套接字超时时释放它。
在连接池中运行后台线程,为每个连接发送定期心跳。现在,如果心跳失败,则关闭该连接并尝试创建新连接。我想确定的是在池中打开和关闭连接时,我希望增加和减少许可,以便它直接反映池中的连接数。我可以使用reducePermits(m)API来减少许可,但要增加,就是在信号量上多次调用release()(即使没有获取),这是唯一的方法吗?
答案 0 :(得分:1)
是的,release()
和release(int)
是用于增加可用许可数量的方法。 reducePermits(int)
存在的唯一原因是提供一种非阻塞手段来减少可用许可的数量。 <{1}}无论如何都是非阻塞的,因此release
函数将是完全冗余的。