1、池化思想
池化思想,一般是对对象的池化。
池化思想的具体体现:字符串常量池、数据库连接池、线程池
好处:避免了重复创建对象的过程,提高程序的效率。为了资源的反复利用。
池: 是一个容器,可以是数组、集合。
2、连接池:
就是一开始时,就初始化创建多个数据库连接对象 放到池中,用的时候就去池中直接拿来使用,用完之后不需要断开连接,直接还入池中即可。
C3P0连接池的原理:
java为数据库连接池提供了一个 连接池接口DataSource
,定义了一些规范,位于javax.sql
包下。所有的连接池如c3p0,dbcp连接池等,都是DataSource
接口的实现类。
我们想使用C3P0连接池来获取数据库连接对象,那么只需要创建一个C3p0连接池对象,然后从连接池中get()
获取连接,使用结束后,调用close()
方法,将连接还回池中即可。
Java 除了规定了数据源dataSource
接口外,还规定了一个 Connection
连接接口。如果使用的是mysql数据源的话,那么获取的连接对象类型应该是 com.mysql.cj.jdbc.ConnectionImpl
。然后,在调用C3p0数据源返回连接时,返回的连接类型并不是正真的数据源连接实现类,而是 封装了真正连接类型的 一个代理类 NewProxyConnection
。这个代理类中 保存了被代理了的对象(即真正的连接对象。)。
因此假如 一个连接池中只有1个连接,现在来获取连接2次,我们会发现 返回的 collection
对象的地址不一样,所以就会以为两次获取的不是同一个连接。。实质上,返回的collection是C3P0 封装了真正连接对象的代理对象。