[转]https://blog.csdn.net/qq_41376740/article/details/81869261
销毁线程
public class DestroyTask implements Runnable {
public DestroyTask() {
}
public void run() {
DruidDataSource.this.shrink(true, DruidDataSource.this.keepAlive);
if (DruidDataSource.this.isRemoveAbandoned()) {
DruidDataSource.this.removeAbandoned();
}
}
}
shrink的关键就在这,其主要功能是收缩就是空闲的太多了要进行回收了。
if (evictCount > 0) {
for(checkCount = 0; checkCount < evictCount; ++checkCount) {
holer = this.evictConnections[checkCount];
connection = holer.getConnection();
JdbcUtils.close(connection);
destroyCountUpdater.incrementAndGet(this);
}
Arrays.fill(this.evictConnections, (Object)null);
}
if(keepAliveCount > 0) {
this.getDataSourceStat().addKeepAliveCheckCount((long)keepAliveCount);
for(checkCount = keepAliveCount - 1; checkCount >= 0; --checkCount) {
holer = this.keepAliveConnections[checkCount];
connection = holer.getConnection();
holer.incrementKeepAliveCheckCount();
boolean validate = false;
try {
this.validateConnection(connection);
validate = true;
} catch (Throwable var17) {
if(LOG.isDebugEnabled()) {
LOG.debug("keepAliveErr", var17);
}
}
if(validate) {
holer.lastActiveTimeMillis = System.currentTimeMillis();
this.put(holer);
} else {
JdbcUtils.close(connection);
}
}
Arrays.fill(this.keepAliveConnections, (Object)null);
}