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

时间:2011-07-15 03:01:33

标签: java connection-pooling semaphore

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

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

1 个答案:

答案 0 :(得分:1)

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