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.pswp.cn/news/272452.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272452.shtml
英文地址,請注明出處:http://en.pswp.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引入了令人興奮的重…