为什么需要数据库连接池:
不使用连接池的情况下执行一条sql语句需要进行以下操作:
1.TCP三次握手;
2.MYSQL认证的三次握手;
3.真正执行SQL;
4.MYSQL的关闭;
5.TCP的四次挥手;
可以看到,为了执行一条SQL,多了非常多我们不关心的网络交互。
使用连接池,多次执行SQL,只需要一次连接的建立和释放,省去了多次连接的建立和释放的开销。
连接池运行机制:
1.从连接池创建或者获取可使用连接;2.使用完毕之后将连接返回给连接池;3.系统关闭前,断开所有连接并释放连接占用的系统资源。
创建连接池 为什么需要连接池名字:
可以创建多个连接池,分别处理不同的数据库。
代码架构分析:分为以下几个部分:
1,操作mysql数据库的API封装类(DBConn);
2,insert前数据的封装操作类(Preparement);
3,select后数据处理封装类(ResultSet);
4,表结构封装类(TableOperator);
5 ,连接池的封装类(DBPool);
6,线程池的封装类(ThreadPool);
7,多线程下锁与信号量的封装类(ThreadNotify);
8,一些配置信息(config);
功能:对比多线程下使用连接池与不使用连接池对数据库相同的操作所花费的时间;
创建线程池,等待队列不为空;队列不为空:从队列中取出数据,从连接池中获取连接(无连接可用,进行等待),处理操作(回调函数处理插入操作),完毕后将连接放回连接池;队列数据处理完毕,发送队列为空信号
添加任务(N次对数据库的插入操作)到队列中,发送队列不为空信号;
销毁线程池,连接池:等待队列为空信号,释放线程池资源,连接池资源