博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C3P0在多线程下的maxPoolSize配置
阅读量:4307 次
发布时间:2019-06-06

本文共 1921 字,大约阅读时间需要 6 分钟。

ETL工具完毕的差点儿相同了。今天遇到一个问题。就是给C3P0配置了maxPoolSize为10。目的是想让整个应用同一时候获得的最大的Connection个数为10,可是在測试应用的这一部分之后,发现PostgreSQL端的链接远远超过10个。由于工具是多线程的。所以就想,是不是多线程的问题,查了一下Connection的个数,也确实是10*线程个数。于是做了一个測试:

将maxPoolSize配置为5。执行以下的程序:

ComboPooledDataSource cpds = new ComboPooledDataSource("postgres");		for (int i = 0; i < 10; i++) {		cpds.getConnection();}ComboPooledDataSource cpds2 = new ComboPooledDataSource("postgres");		for (int i = 0; i < 10; i++) {		cpds2.getConnection();}

maxPoolSize配置为5。一共想要获取20个链接,这时查看PostgreSQL Server端的连接数为5,正式预期的结果。

在执行以下的程序:

for (int i = 0; i < 2; i++) {			new Thread(new Runnable() {				@Override				public void run() {					ComboPooledDataSource cpds = new ComboPooledDataSource("postgres");					for (int i = 0; i < 10; i++) {						try {							cpds.getConnection();						} catch (SQLException e) {							e.printStackTrace();						}					}					try {						Thread.sleep(100000);					} catch (InterruptedException e) {						e.printStackTrace();					}				}			}, "Thread" + i).start();		}
两个线程,每一个线程想要获取10个链接数,这时查看PostgreSQL Server端的链接数,是10个。将i<2改为i<3,在执行一次,查看PostgreSQL Server端的连接数是15。

再进行以下的測试:

final ComboPooledDataSource cpds = new ComboPooledDataSource("postgres");		for (int i = 0; i < 3; i++) {			new Thread(new Runnable() {				@Override				public void run() {					for (int i = 0; i < 10; i++) {						try {							cpds.getConnection();						} catch (SQLException e) {							e.printStackTrace();						}					}					try {						Thread.sleep(100000);					} catch (InterruptedException e) {						e.printStackTrace();					}				}			}, "Thread" + i).start();

创建3个线程,每一个线程须要10个Connection,这时查看PostgreSQL Server端的连接数是5。可见,PostgreSQL Server端的链接的个数与client创建的ComboPooledDataSource实例的个数成正比。C3P0配置文件里配置的内容都是针对一个ComboPooledDataSource实例的限制。

结论:

底层的原因大概是由于C3P0不是为多线程设计的,在底层JDBC也不是线程安全的。

详细的原因,有机会在详细分析。

一个应用中一般一个数据源仅仅用一个ComboPooledDataSource对象,也就是一个ComboPooledDataSource实例。

转载于:https://www.cnblogs.com/mengfanrong/p/5129613.html

你可能感兴趣的文章
实验1.1
查看>>
2015 多校第三场
查看>>
CSS基础
查看>>
浅蓝色设计类网站模板
查看>>
QT中的pro文件
查看>>
幂等和高并发在电商系统中的使用
查看>>
手机操控全站仪安卓版 测量员.app
查看>>
mysql 模块使用
查看>>
解决android中Layout文件下的xml文件配好后,R类中不能自动生成相应代码
查看>>
[iOS] photoKit获取所有照片
查看>>
下载安装webstrom及激活
查看>>
Android Studio 之 NDK篇
查看>>
【ASP】简单Url编码和Url解码实例
查看>>
怎样基于谷歌地图的Server缓存公布Image Service服务
查看>>
完美攻略心得之圣魔大战3(Castle Fantisia)艾伦希亚战记(艾伦西亚战记)包含重做版(即新艾伦希亚战记)...
查看>>
浅谈UML的概念和模型之UML九种图
查看>>
BW:BW增量更新方法(假增量)
查看>>
SQLite—homework
查看>>
理解js中的原型链,prototype与__proto__的关系
查看>>
design.js
查看>>