- 博客(11)
- 收藏
- 关注
原创 源码阅读总结
两周的源码阅读活动结束啦,第一次阅读源码,了解了开源项目的结构,也跟同学们学到了阅读源码的一些技巧,虽然只能看懂一些流程上的设计,但是万事开头难,想要对核心逻辑有所突破还需要多练多看,尤其是涉及到多线程锁的部分,接下来要学习java多线程。这次活动也给我了一些学习的思路,期待下次活动哦。...
2022-05-20 21:22:44
128
原创 DruidDataSource类源码分析(七)
createPhysicalConnection( )获得url,user,passwordconn = createPhysicalConnection(url, physicalConnectProperties)public Connection createPhysicalConnection(String url, Properties info) throws SQLException { Connection conn; if (getProxyFilters().s
2022-05-19 22:44:57
371
原创 DruidDataSource类源码分析(六)
createAndStartDestroyThread( )两种回收连接池的策略:通过作DestroyConnectionThread按timeBetweenEvictionRunsMillis间隔调度执行destoryTaskprotected void createAndStartDestroyThread() { destroyTask = new DestroyTask(); if (destroyScheduler != null) { long pe
2022-05-18 21:20:34
159
原创 DruidDataSource类源码分析(五)
CreateConnectionThread( )该流程独立运行,大部分时间处于等待状态,不会抢占cpu但是当连接不够用时,就会被唤起追加连接,成功创建连接后将会唤醒其他正在等待获取可用连接的线程.public class CreateConnectionThread extends Thread { public CreateConnectionThread(String name){ super(name); this.setDaemon(true);
2022-05-17 21:39:14
188
原创 DruidDataSource类源码分析(四)
pollLast( )核心逻辑是自旋,判断是否有可用连接,然后发送empty消息,通知生产者线程可以创建连接。之后阻塞wait。只不过这个方法需要设置超时时间。 private DruidConnectionHolder pollLast(long nanos) throws InterruptedException, SQLException { // estimate超时时间 long estimate = nanos; for (;;)
2022-05-16 22:13:49
214
原创 DruidDataSource类源码分析(三)
discardConnection( )通过JdbcUtils关闭连接if (holder == null) { return;}Connection conn = holder.getConnection();if (conn != null) { JdbcUtils.close(conn);}调整activeCount和discardCount这俩参数什么含义不太清楚lock.lock();try { if (holder.discard) {
2022-05-14 21:56:19
242
原创 DruidDataSource类源码分析(三)
getConnectionInternal( )检查closed和enable状态是否正确,抛出异常就推出if (closed) { connectErrorCountUpdater.incrementAndGet(this); throw new DataSourceClosedException("dataSource already closed at " + new Date(closeTimeMillis));}if (!enable) { connectErro
2022-05-13 22:32:40
278
原创 DruidDataSource类源码分析(二)
分析DruidDataSource类中的方法getConnectionDirect( )首先通过一个for循环自旋,确保连接的创建。for (;;) { // handle notFullTimeoutRetry DruidPooledConnection poolableConnection; try { //调⽤getConnectionInternal 获取连接 poolableConnection = getConnectionIntern
2022-05-12 22:35:44
548
原创 DruidDataSource类源码分析(一)
实现DataSource中的方法getConnection( )@Overridepublic DruidPooledConnection getConnection() throws SQLException { /** * 实现DataSource接口的getConnection方法 */ return getConnection(maxWait);}public DruidPooledConnection getConnection(long maxWaitM
2022-05-11 22:07:06
340
原创 为什么需要数据库连接池
5.10 | 为什么需要数据库连接池:使用数据库直接连接对 MySQL 多半是进行连接(connection),增删改查并提交(execSQL、commit),关闭连接(close)操作,然后实现业务相关逻辑。其操作也很清晰:建立TCP连接验证数据库认证信息发送请求(数据的 CRUD 操作)关闭数据库连接关闭TCP连接数据库连接池在业务量流量不大,并发量也不大的情况下,连接临时建立完全可以。但并发量起来,达到百级、千级,其中建立连接、关闭连接的操作会造成性能瓶颈,所以得考虑连接
2022-05-10 21:28:45
1107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人