连接池原理
2019-06-12 本文已影响0人
传葱
什么是连接池
- 上游对下游发起的请求,比如数据库连接池crud操作
为什么使用连接池?
- 如果不使用连接池,每次请求到达的时候建立连接也是可以的,但是随着请求并发变大,需要优化连接步骤:
- 建立连接:(需要优化)
- 发生请求:CRUD
- 销毁连接(需要优化)
- 每次请求到来需要建立连接,完成之后销毁连接,连接的创建和销毁带来很大的资源消耗,所有类似线程池,需要一个存储结构放置空闲的连接,以备下次连接来使用
连接池的实现
使用DruidDataSource,该类中变量分分为三种:记录状态的, 比如连接数量connectCount,关闭数量closeCount等;存储相关DruidConnectionHolder[] connection 这个数组中保存建立的连接对象,还记录活跃数量activeCount,废弃数量discardCount等,第三个记录线程DestroyTask destroyTask; CreateConnectionThread createConnectionThread; 这些大体上可以看出连接池中对象类型和大致功能
连接池核心功能
image.pngDruidConnectionHolder[] connections;
createConnection()
getConnection()
recycle()
根据需要决定是否创建新的Connection,如果需要调用createConnection(),把创建好的connection对象保存到DruidConnectionHolder[] 中, 然后等待的线程使用创建好的连接getConnection(), 使用完之后connection对象不会被销毁,而是回收到数组中:recycle()方法
image.png- 这个锁控制同一时间只有一个线程访问线程池,对线程池相关的数据进行修改