现在我们来一起看下 创建并运行创建连接线程:createAndStartCreatorThread();
protected void createAndStartCreatorThread() {
// 只有在创建执行器没有设置时,才会创建创建连接线程
if (createScheduler == null) {
String threadName = "Druid-ConnectionPool-Create-" + System.identityHashCode(this);
createConnectionThread = new CreateConnectionThread(threadName);
createConnectionThread.start();
return;
}
// 这里是在主线程里等待创建和销毁线程都创建完成后再继续执行
initedLatch.countDown();
}
这里有一点,也是在阿里巴巴编码规范里的,创建线程或线程池要取一个业务相关的名字,后续在排查问题时会方便很多。如果怀疑创建连接的线程意外挂掉了,可以 jstack 查看这个名字 Druid-ConnectionPool-Create- 开头的线程状态即可。
public CreateConnectionThread(String name){
super(name);
this.setDaemon(true);
}
这里可以看到,这个线程是守护线程,毕竟如果只剩下创建连接这个线程存活,也就没有意义了。
既然是线程,那主要逻辑代码肯定在 run 方法中了。
主要分两部分:
第一部分,加锁,然后使用一些 volatile 属性值做判断,是否在 empty 这个条件上等待;
第二部分,创建连接,并把连接保存到数组中;
Druid连接池创建线程详解

最低0.47元/天 解锁文章
946

被折叠的 条评论
为什么被折叠?



