druid1.2.8源码悦读:第五天
druid1.2.8源码悦读:第五天
文章目录
- druid1.2.8源码悦读:第五天
- 一、回顾
- 二、`dataSource.getConnectionDirect(maxWaitMillis)`
- 2.1 进入一个无限循环:`for(;;)`
- 2.2 调用`getConnectionInternal(maxWaitMillis)`
- (1)根据maxWaitMillis创建`nanos`
- (2)`connectCount++;`
- (3)`takeLast();`
- 2.3 `takeLast();`
- (1)`emptySignal(); ` 唤醒CreateThread 创建线程池
- (2)`notEmpty.await();` 让notEmpty等待,让创建线程的方法运行。
- (3)从线程池中取出最后一个,并将最后一个位置设置为null
一、回顾
在第四天,阅读了通过过滤链创建数据库连接池的骨架,过滤器通过递归的方式不在在连接上增强,而底层调用的是:
DruidPooledConnection connection = dataSource.getConnectionDirect(maxWaitMillis);
二、dataSource.getConnectionDirect(maxWaitMillis)
2.1 进入一个无限循环:for(;;)
进入一个无限循环。
2.2 调用getConnectionInternal(maxWaitMillis)
获取一个内部连接。
默认maxWaitMillis
值为-1,也就是说,可以无限时间的等待,直到建立数据库连接。
(1)根据maxWaitMillis创建nanos
maxWaitMillis 的单位是毫秒,最大等待时间。将这个时间转换成纳秒
final long nanos = TimeUnit.MILLISECONDS.toNanos(maxWait);
(2)connectCount++;
connectCount++;
(3)takeLast();
DruidConnectionHolder holder = takeLast();
2.3 takeLast();
(1)emptySignal();
唤醒CreateThread 创建线程池
(2)notEmpty.await();
让notEmpty等待,让创建线程的方法运行。
(3)从线程池中取出最后一个,并将最后一个位置设置为null
DruidConnectionHolder last = connections[poolingCount];
connections[poolingCount] = null;
return last;
发现,这里创建线程池,使用到了多线程。并且创建数据库连接的线程是在init()
中初始化的。通过lock、empty、notempty来控制线程创建连接。
druid1.2.8源码悦读:第五天相关推荐
- 4月,诚邀你参加源码共读,学会看源码,打开新世界!开阔视野
大家好,我是若川.很多关注我的新朋友可能不知道我组织了源码共读活动~ 也有很多人不知道我是谁.有人以为我是80后.有人以为我是全职自媒体等等.若川的 2021 年度总结,弹指之间 这篇文章写了我是16 ...
- 可能是全网首个前端源码共读活动,诚邀你加入一起学习
大家好,我是若川.众所周知,从8月份开始,我组织了源码共读活动,每周学习200行左右的源码,到现在持续了3个多月,坚持答疑解惑.帮助了不少人,还是挺开心的.另外,涌现了很多优秀的读者朋友,比如有就职于 ...
- 3个多月,近3000人参与的源码共读,诚邀加入~
大家好,我是若川.众所周知,从8月份开始,我组织了源码共读活动,每周学习200行左右的源码,到现在持续了3个多月,坚持答疑解惑.帮助了不少人,还是挺开心的.另外,涌现了很多优秀的读者朋友,投稿了很多优 ...
- 若川邀你进 源码共读 群~长期交流学习
大家好,我是若川.这是一个愉快的周六~ 估计还是有很多读者不知道我.若川名字由来是取自:上善若水,海纳百川.顺便放两篇文章.我读源码的经历,跟各位读者朋友分享下公众号运营策略 加我微信进 源码共读 群 ...
- 祝大家七夕快乐,邀你源码共读,顺带发点红包
大家好,我是若川.这是一个普通的周六.只不过又叫七夕节,祝大家七夕节快乐~所以就不更新技术文了. 估计还是有很多读者不知道我.若川名字由来是取自:上善若水,海纳百川.顺便放两篇文章.我读源码的经历,跟 ...
- Spark Mlib TFIDF源码详读 笔记
2019独角兽企业重金招聘Python工程师标准>>> 在提取文本特征时,经常用到TF-IDF算法.Spark Mlib实现了该算法.下面是Spark Mlib中,TF_IDF算法调 ...
- 我和掘金合作的源码共读小册报名快1000人了~
众所周知,我和掘金合作出了源码共读第一期.我是前端领读员.现在报名快1000人了~奖品丰厚. 也有一些小伙伴已经写了好几期笔记了~但相对1000人写的还是太少. 什么?你不知道?那也很正常,毕竟我的公 ...
- Linux驱动开发 / fbtft源码速读
哈喽,老吴又来分享学习心得啦~ 一.目标与体系 目标是关于你想要达到的结果,而体系是涉及导致这些结果的过程; 目标的意义在于确定大方向,但体系才能促进进步.完全忽略目标,只关注体系,仍然会成功. 结果 ...
- 【Spring源码这样读】-怎么阅读源码
做开发要不要读源码?如果你天天996,真心的不建议你去读源码(我是不介意做一个劝退师的).读源码确确实实是一个费时费力的活,如果你每天都很忙,偶尔看一眼,想了解其中的奥秘,这很难办到.那我们需不需要读 ...
最新文章
- 微软曾经的二号人物永远地离开了
- 我的Android进阶之旅------gt;怎样在多个LinearLayout中加入分隔线
- 计算机专业词典_好书优选:实用英汉汉英计算机词典
- Netty原理架构解析
- 剑指offer(12)旋转数组的最小数字
- 系统架构师 项目经理 哪个更有前景_中央空调加地暖与五恒系统,哪个更省钱?...
- linux shell 豆瓣,用Linux shell脚本爬取豆瓣邮箱
- 哈希表,哈希算法(C语言)
- 转lua解析脚本过程中的关键数据结构介绍
- 5.23考前友情提醒
- 排便的快感--不是非主流
- 新版quartus_prime破解与altera官网下载器件库
- Nmap支持的TCP / IP 系统指纹识别方法
- Grafana Tempo部署
- html页面的结构标记是什么意思,html页面的结构标记是什么
- 地理学中的经典统计分析方法
- java版我的世界MITE怎么下_MITE纯新手向教程 - [MITE]MC实在是太简单了 (Minecraft Is Too Easy) - MC百科|最大的Minecraft中文MOD百科...
- PCB设计之安规规范
- ​大佬,像这种国外创意PPT逻辑图,你能做出来吗?
- 服装办理erp体系的优点与选择
热门文章
- c++基础温习之指针分配空间
- ByRef和ByVal
- promise解决回调地狱(callback hell)
- 跨境电商B2B是什么?跨境电商B2B模式如何定义?
- Fresco的使用及圆角
- 12.2 数据库控制文件复制到ASM磁盘组
- 华为路由器命令手册_用数据说话,华为路由Q2 Pro与网件R7800对比测评
- Java 小白 设计加油站类和汽车类,加油站提供一个给车加油的方法,参数为剩余汽油数量。每次执行加油方法,汽车的剩余数量都会加2
- 面试AI算法岗,你被要求复现顶会论文了嘛?
- Elasticsearch7.8