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实例。

C3P0在多线程下的maxPoolSize配置的更多相关文章

  1. C3P0连接池详解及配置

    C3P0连接池详解及配置 本人使用的C3P0的jar包是:c3p0-0.9.1.jar <bean id = "dataSource" class = "com.m ...

  2. 关于Spring在多线程下的个人疑问

    在Web开发中,不可避免的是需要遇到并发操作的,并发操作就有可能会引发我们的多线程安全问题.比如说,我们多线程下访问同一个变量并且有一个线程做出修改那么就会使得我们另外的线程在不知情的情况下被修改自己 ...

  3. 在Windows平台下安装与配置Memcached及C#使用方法

    1.在Windows下安装Memcached 资料来源:http://www.jb51.net/article/30334.htm 在Windows平台下安装与配置Memcached的方法,Memca ...

  4. ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开

    ASP.NET MVC Filters 4种默认过滤器的使用[附示例]   过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...

  5. Java进阶专题(十五) 从电商系统角度研究多线程(下)

    前言 ​ 本章节继上章节继续梳理:线程相关的基础理论和工具.多线程程序下的性能调优和电商场景下多线程的使用. 多线程J·U·C ThreadLocal 概念 ​ ThreadLocal类并不是用来解决 ...

  6. C#多线程下的调优

    一.原子操作 先看一段问题代码 /// <summary> /// 获取自增 /// </summary> public static void GetIncrement() ...

  7. Linux下安装和配置JDK与Tomcat(升级版)

    在这个版本 Linux下安装和配置JDK与Tomcat(入门版) 的基础上优化升级 1.下载相关软件 apache-tomcat-6.0.37.tar.gz jdk-6u25-linux-i586-r ...

  8. 多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用

    本篇文章主要介绍下多线程下NSOperation.NSBlockOperation.NSInvocationOperation.NSOperationQueue的使用,列举几个简单的例子. 默认情况下 ...

  9. Centos下安装和配置SVN

    1.安装SVN服务 #检查现有版本 rpm -qa subversion #如果存储旧版本,卸载旧版本SVN yum remove subversion #安装SVN yum install subv ...

随机推荐

  1. linux下C语言socket网络编程简例

    原创文章,转载请注明转载字样和出处,谢谢! 这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到client的连接后,发送数据给client:clie ...

  2. hdu 1028 母函数 一个数有几种相加方式

    ///hdu 1028 母函数 一个数有几种相加方式 #include<stdio.h> #include<string.h> #include<iostream> ...

  3. POJ2584 T-Shirt Gumbo【二分图多重匹配】

    题目链接: id=2584">http://poj.org/problem?id=2584 题目大意: 如今有5种型号(S.M.L.X.T)的衣服要发放给N个參赛队员.给出每一个參赛者 ...

  4. 【矩阵乘】【NOI 2012】【cogs963】随机数生成器

    963. [NOI2012] 随机数生成器 ★★ 输入文件:randoma.in 输出文件:randoma.out 简单对照 时间限制:1 s 内存限制:128 MB **[问题描写叙述] 栋栋近期迷 ...

  5. JavaScript 中的事件流和事件处理程序(读书笔记思维导图)

    JavaScript 程序采用了异步事件驱动编程模型.在这种程序设计风格下,当文档.浏览器.元素或与之相关的对象发生某些有趣的事情时,Web 浏览器就会产生事件(event). JavaScript ...

  6. HTML5 Canvas动画效果实现原理

    在线演示 使用HTML5画布可以帮助我们高速实现简单的动画效果.基本原理例如以下: 每隔一定时间绘制图形而且清除图形,用来模拟出一个动画过程,能够使用context.clearRect(0, 0, x ...

  7. A Game of Thrones(12) - Eddard

    The summons(['sʌm(ə)nz]召唤:传票) came in the hour before the dawn, when the world was still and grey. A ...

  8. hdu3652(数位dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3652 题意:求1~n含有13且能被13整除的数的个数. 分析:数位dp,dp数组加一维来维护到pos位 ...

  9. 恩布企业 IM 安卓端 1.3,服务端 1.12 公布

    恩布企业IM的 Android 安卓开源手机client EntboostIM 公布 1.3 版本号.同一时候恩布IM服务端更新至 1.12 版本号; 安卓端主要更新内容: 添加收发手机文件功能: 登 ...

  10. BZOJ 1109 POI2007 堆积木Klo LIS

    题目大意:给定一个序列,能够多次将某个位置的数删掉并将后面全部数向左串一位,要求操作后a[i]=i的数最多 首先我们如果最后a[i]=i的数的序列为S 那么S满足随着i递增,a[i]递增(相对位置不变 ...