今天加班比较晚,打断点研究了下昨天的疑问点
1.淘汰连接线程不光会去淘汰线程,连接池的连接数量+活跃数量<小于最小闲置数量,会去创建连接满足最小闲置数量,还会去提交创建连接定时任务;目前不是很理解这种设计,是为了提高性能还是其他目的
if (needFill) { lock.lock(); try { int fillCount = minIdle - (activeCount + poolingCount + createTaskCount); for (int i = 0; i < fillCount; ++i) { emptySignal(); } } finally { lock.unlock(); } } else if (onFatalError || fatalErrorIncrement > 0) { lock.lock(); try { emptySignal(); } finally { lock.unlock(); } }
2.池子里有4个,最小闲置1个,如果未到配置的淘汰时间,不会淘汰,如果配淘汰时间,连接池会优先不活跃时间大于淘汰时间的连接