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() {@Overridepublic 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() {@Overridepublic 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派外设开发编程

树莓派外设开发接口文档参考 wiringPi&#xff08;特定平台&#xff0c;特定功能接口&#xff09; 库&#xff08;linux 动态库 静态库&#xff09; gcc demo1.c -lwiringPi //编译时要加-lwiringPigpio -v //查看是否安装wiringPi库 gpio version: 2.50 Copyright (c) 2012-2…

Bootstrap 5款常用模板

篇文章中&#xff0c;我们已经编制了5款最好的 Bootstrap 4.0 主题模板清单&#xff0c;让您可以用在下一个项目中&#xff0c;我们希望你能找到有用的。这些主题包含了所有必要的 HTML 和 CSS 为基础的设计模板的版式&#xff0c;表单&#xff0c;按钮&#xff0c;导航和其它界…

工作内外网同时连接方案

需求 工作的时候需要用到外网查询资料&#xff0c;又需要用内网完成工作任务。不想来回切换网络。 前提 外网使用无线&#xff0c;内网使用水晶头接口。 方案 1.插入水晶头接口&#xff08;效果是连接内网&#xff09;。 2.进入 → “控制面板\网络和 Internet\网络和共享中心”…

三种常用图片格式的使用场景

GIF&#xff1a;1&#xff1a;256色2&#xff1a; 无损&#xff0c;编辑 保存时候&#xff0c;不会损失。3&#xff1a;支持简单动画。4&#xff1a;支持boolean透明&#xff0c;也就是要么完全透明&#xff0c;要么不透明JPEG&#xff1a;1&#xff1a;millions of colors2&am…

交叉编译及树莓派(或其他平台)交叉编译工具链的安装

交叉编译是什么&#xff1a; 交叉编译是一个行为&#xff0c;是在一个平台上生成另一个平台上的可执行代码。 比如&#xff1a;我们在windows上面编写C51的代码&#xff0c;并编译成可执行代码&#xff0c;如xx.hex,是在C51上面运行不是在windows上面运行。 同样&#xff1a;我…

Delphi:ADOConnection连接SQLServer自动断网问题解决

解决方法一&#xff1a;异常时关闭连接&#xff0c;WinXP&#xff0c;win7 32位大部分情况都是起作用的&#xff0c;不过在有些windows操作系统下&#xff08;如家庭版&#xff09;不起作用&#xff0c;不知为何&#xff1f; try //执行sql操作 except AdoConnection.close;//…

走近北京后厂村程序员的真实生活

来源&#xff1a;中新经纬北京的西北角是个特别的区域&#xff0c;这里汇集了众多互联网及IT企业&#xff0c;实力雄厚的上市公司将自家 logo 悬挂在大厦的顶端&#xff0c;而刚起步的创业公司也会选择在这里租下一亩三分地。中关村、上地、西二旗、后厂村……它们成为了一个个…

带wiringPi库的交叉编译

WiringPi的下载——网盘提取 链接&#xff1a;https://pan.baidu.com/s/1cPIt-xZLye1DAQjq2yKzeg 提取码&#xff1a;35vt &#xff08;这个库不是很好&#xff0c;链接的库的格式不对&#xff0c;是宿主机的平台&#xff0c;需要自己将树莓派的wiringpi库&#xff08;libwiri…

lintcode:最小编辑距离

最小编辑距离 给出两个单词word1和word2&#xff0c;计算出将word1 转换为word2的最少操作次数。 你总共三种操作方法&#xff1a; 插入一个字符删除一个字符替换一个字符样例 给出 work1"mart" 和 work2"karma" 返回 3 解题 动态规划解题 定义矩阵dp[][]…

这些代码优化的方法,你都用过吗?

来自&#xff1a;www.cnblogs.com/xrq730/代码优化的最重要的作用应该是&#xff1a;避免未知的错误在代码上线运行的过程中&#xff0c;往往会出现很多我们意想不到的错误&#xff0c;因为线上环境和开发环境是非常不同的&#xff0c;错误定位到最后往往是一个非常小的原因。然…

VMwareTool 安装

VMwareTools的一些实用性 安装后用户可以从物理主机直接往虚拟机里面拖文件。 安装后鼠标进入虚拟机后可以直接出来&#xff0c;不安装的话要按CTRLALT才可以释放鼠标。 安装后可以解决Ubuntu主窗口分辨率不适应问题&#xff0c;用户可以随意改变虚拟机窗口大小&#xff0c;vm…

Yann LeCun, Geoffrey E. Hinton, and Yoshua Bengio

转载于:https://www.cnblogs.com/hanhuilee/p/5221255.html

Ubuntu18.04的vim和ifconfig的安装

安装vim &#xff1a; 命令行中输入&#xff1a;sudo apt-get install vim (ps:它会显示让你输入密码&#xff0c;不过你输入的密码不会回显) 查看安装是否成功输入&#xff1a; vim -v 若出现以下情况&#xff1a; The following packages have unmet dependencies: vim : …

Http与WWW服务精解

TCP/IP 协议介绍在介绍 HTTP 协议之前&#xff0c;先简单说一下TCP/IP协议的相关内容。TCP/IP协议是分层的&#xff0c;从底层至应用层分别为&#xff1a;物理层、链路层、网络层、传输层和应用层&#xff0c;如下图所示&#xff1a;从应用层至物理层&#xff0c;数据是一层层封…

嵌入式设备带操作系统的启动过程

树莓派等芯片带操作系统的启动过程 C51&#xff0c;STM32(裸机)--------》c直接操控底层寄存器&#xff0c;实现相关业务。 x86 &#xff0c; Intel等架构跑的是windows操作系统。 启动过程&#xff1a;电源 -》BIOS-》windows内核-》C盘&#xff0c;D盘-》程序启动&#xff…

C#笔记

#region Using directives ... #endregion :表示中间的语句可以折叠 Console.WriteLine(); 类似于C语言中的输入语句 &#xff0c;不过此处还须加入Console.ReadKey(); Console.WriteLine("{0} {1}.",myString,myInteger); 字符串中的每对花括号表示一个占位符&#…

微软宣布下一代集成开发环境 — Visual Studio 2019

来自&#xff1a;开源中国链接&#xff1a;https://www.oschina.net/news/96817/microsoft-announces-visual-studio-2019在今天的一篇名为 Whats Next for Visual Studio 的博客文章中&#xff0c;微软宣布了它下一个版本的集成开发环境 —— Visual Studio 2019。不过&#x…

史上最通俗的集线器、交换机、路由器功能原理入门

1、前言本文旨在简单地说明集线器、交换机与路由器的区别&#xff0c;因而忽略了很多细节&#xff0c;三者实际的发展过程和工作原理并非文中所写的这么简单。如果你看完本文能大概了解到三者的异同&#xff0c;本文的目的就达到了。2、帝国时代我相信我们都玩过一款特别火的游…

泛型(Generic)

为什么要有泛型&#xff1f; 1.解决元素存储的安全性问题 2.解决获取数据元素时&#xff0c;需要类型强转的问题 服用前&#xff1a; 服用后&#xff1a; 泛型&#xff0c;JDK1.5新加入的&#xff0c;解决数据类型的安全性问题&#xff0c;其主要原理是在类声明时通过一个标识表…

官宣!DevExpress Blazor UI组件,支持全新的.NET 8渲染模式

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验&#xff0c;这个UI自建库提供了一套全面的原生Blazor UI组件&#xff08;包括Pivot Grid、调度程序、图表、数据编辑器和报表等&#xff09;。 .NET 8为Blazor引入了令人兴奋的重…