开发者学堂课程【Java 面试疑难点串讲 2:Java 数据库开发:数据库连接池实现原理
】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/25/detail/542
数据库连接池实现原理
如果想实现一个连接池,本质的思想就是实现一个 Connection 的对象数组,但是这个对象数组并不是无限开辟的,是有上限存在的,所以最初的数据库手工连接池的实现可以采用 Map 集合完成。
也就是说在进行处理的时候 Map 集合里面保存有全部连接池的可用连接(最小维持数、最大可打开数、最大等待时间)
实现思路:
1. 所有的连接对象被 Map 集合所管理,但是这个 Map 集合受到最大连接数的控制,也就是说如果现在需要获取数据库连接,但是发现已经没有可用的连接了,则这个时候应该开辟新的连接,但是同时需要保证连接池中是有上限的;
2. 在获取连接的时候如果发现连接已经满了,则这个时候应该追加有一个等待唤醒的控制,也就是说对于连接池的控制,如果发现没有连接,则等待新的连接到来,就可以采用线程的等待与唤醒机制来完成;
3. 连接池中的连接使用完成之后一定要关闭,但是这个的关闭并不是彻底的关闭数据库的连接,而是说将这个连接的可用性重新放回到连接池之中,也就是说为连接池里面设置一个标记(标记为 true,那么就表示该连接可用,如果没有 true 的连接了,那么就表示连接池满了,而当把连接放回去之后将这个标记设置为 false,就表示有空余连接了);
4. 如果现在要去考虑连接池的实现,最好的做法是使用 ConcurrentHashMap 子类来性,这个类考虑到了并发性,并且也可以有很好的同步处理效果。