首先列举三个概念:
最大连接数:连接池维护的最大连接数;
空闲连接池:维护着空闲链接
活动连接池:维护着正在使用的链接
下面用伪代码来说明拿取一个连接工作过程:
if(空闲连接池.size()!=0){
在空闲连接池拿出一个连接提供使用,并将其标识到活动连接池中;
}else{
if(最大连接数.size()>活动连接池.size()){
在新创建一个连接提供使用,并将其标识到活动连接池中;
}else{
如果活动连接池最早的那个已过期,则释放,提供使用;
否则线程等待,之后循环此过程
}
}
描述:
1. 先看是否有空闲(idle)状态下的PooledConnection对象,如果有,就直接返回一个可用的PooledConnection对象;否则进行第2步。
2. 查看活动状态的PooledConnection池activeConnections是否已满;如果没有满,则创建一个新的PooledConnection对象,然后放到activeConnections池中,然后返回此PooledConnection对象;否则进行第三步;
3. 看最先进入activeConnections池中的PooledConnection对象是否已经过期:如果已经过期,从activeConnections池中移除此对象,然后创建一个新的PooledConnection对象,添加到activeConnections中,然后将此对象返回;否则进行第4步。
4. 线程等待,循环1步