C3P0在多线程下的maxPoolSize配置
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配置的更多相关文章
- C3P0连接池详解及配置
C3P0连接池详解及配置 本人使用的C3P0的jar包是:c3p0-0.9.1.jar <bean id = "dataSource" class = "com.m ...
- 关于Spring在多线程下的个人疑问
在Web开发中,不可避免的是需要遇到并发操作的,并发操作就有可能会引发我们的多线程安全问题.比如说,我们多线程下访问同一个变量并且有一个线程做出修改那么就会使得我们另外的线程在不知情的情况下被修改自己 ...
- 在Windows平台下安装与配置Memcached及C#使用方法
1.在Windows下安装Memcached 资料来源:http://www.jb51.net/article/30334.htm 在Windows平台下安装与配置Memcached的方法,Memca ...
- ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开
ASP.NET MVC Filters 4种默认过滤器的使用[附示例] 过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...
- Java进阶专题(十五) 从电商系统角度研究多线程(下)
前言 本章节继上章节继续梳理:线程相关的基础理论和工具.多线程程序下的性能调优和电商场景下多线程的使用. 多线程J·U·C ThreadLocal 概念 ThreadLocal类并不是用来解决 ...
- C#多线程下的调优
一.原子操作 先看一段问题代码 /// <summary> /// 获取自增 /// </summary> public static void GetIncrement() ...
- Linux下安装和配置JDK与Tomcat(升级版)
在这个版本 Linux下安装和配置JDK与Tomcat(入门版) 的基础上优化升级 1.下载相关软件 apache-tomcat-6.0.37.tar.gz jdk-6u25-linux-i586-r ...
- 多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用
本篇文章主要介绍下多线程下NSOperation.NSBlockOperation.NSInvocationOperation.NSOperationQueue的使用,列举几个简单的例子. 默认情况下 ...
- Centos下安装和配置SVN
1.安装SVN服务 #检查现有版本 rpm -qa subversion #如果存储旧版本,卸载旧版本SVN yum remove subversion #安装SVN yum install subv ...
随机推荐
- MVC之国际化
MVC之国际化 前言 在项目中遇到国际化语言的问题是常有的事情,之前在做关于MVC国际化语言时,刚开始打算全部利用AngularJS来实现,但是渐渐发现对于页面Title难以去控制其语言转换,于是对于 ...
- CDOJ 1221 Ancient Go
题目链接:http://acm.uestc.edu.cn/#/problem/show/1221 题目分类:dfs 代码: #include<bits/stdc++.h> using na ...
- 玩转Windows服务系列——命令行管理Windows服务
原文:玩转Windows服务系列——命令行管理Windows服务 说到Windows服务的管理就不得不说通过命令行的方式管理Windows服务,因为无论是系统管理员,还是通过编程的方式调用cmd命令, ...
- [Xcode]SVN的使用
当发生冲突时: (p)postpone: -mark the conflict be resolved later 保持冲突,手动修改源文件解决冲突 (df)diff-full: -show all ...
- [初探iOS开发]storyboard的使用
storyboard的目的是为了方便的设计程序view之间的关系,使得程序员把精力都放到核心业务逻辑之上.
- java学习笔记07--日期操作类
java学习笔记07--日期操作类 一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. public class T { public ...
- latex命令替换之\newcommand
有时候我们在用latex写文档的时候不想写很长的命令,那么我们自己定义一个新的命令来替换一段代码. 举例如下: \usepackage{booktabs} \usepackage{multirow} ...
- jQuery选择器实现隔行变色和使用javaScript实现隔行变色
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <!--什么是选择器? jQuery选择器继承了 ...
- myeclipse 那个版本号好用?
myeclipse 那个版本号好用? 有没有现成的下载地址?
- (7)基于hadoop的简单网盘应用实现3
一.login.jsp登陆界面实现 解压bootmetro-master.zip,然后将\bootmetro-master\src\下的assets目录复制到project里. bootmetro下载 ...