1. 程式人生 > >【java】簡單實現數據庫連接池

【java】簡單實現數據庫連接池

zed cal lean jdbc stat eof LEDE import thread

一直在想java事務是怎麽實現的,在原聲jdbc的時候級別下,我們可以通過關掉autocommit 然後再手動commit。但是項目開發中基本上是看不見conection的。所以自己決定簡單實現框架的一點皮毛功能。首先就是數據庫連接池了

1. 先定義一個接口

import java.sql.Connection;

public interface IConnectionPool {

    /**
     * 獲取一個連接
     * @return
     */
    Connection getConnection();

    /**
     * 用完後調用,把連接放回池中,實現復用
     
*/ void freeLocalConnection(); /** * 銷毀連接池 */ void destroy(); //測試用 void status(); }

2. 實現數據庫連接池的代碼, 為了線程安全,簡單粗暴地用synchronized關鍵字

  實現事務的關鍵是,我們執行一個事務的Connection是同一個,我們可以在事務控制的時候用AOP,在事務開始的時候 調用setAutoCommit(false) 然後在事務代碼之後調用commit()方法.

  所以在數據庫連接池中使用了一個ThreadLocal來保證一條線程拿到的是同一個Connection。

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.Properties;
import java.util.Vector;
import java.util.concurrent.atomic.AtomicInteger;

public class ConnectionPollImpl implements
IConnectionPool{ private String username; private String password; private String url; private String driver; private Integer maxSize; private Integer initSize = 5; private long timeOut; //連接總數 private AtomicInteger totalSize = new AtomicInteger(0); //空閑的連接 private List<Connection> freeConnections = new Vector<>(); //已經被使用的連接 private List<Connection> activeConnections = new Vector<>(); //存儲當前線程的連接, 事務控制的關鍵 private ThreadLocal<Connection> localConnection = new ThreadLocal<Connection>(){ /** * 第一次調用get()方法時執行 * @return */ @Override protected Connection initialValue() { try { return connect(); } catch (SQLException e) { e.printStackTrace(); } return null; } @Override public void remove() { Connection connection = get(); activeConnections.remove(connection); freeConnections.add(connection); super.remove(); } }; private static ConnectionPollImpl instance; public ConnectionPollImpl() { loadConfig(); init(); } private void init() { try { for(int i=0;i < initSize;i++){ freeConnections.add(newConnection()); } } catch (SQLException e) { e.printStackTrace(); } } public static ConnectionPollImpl getInstance() { synchronized (ConnectionPollImpl.class) { if (instance == null) { synchronized (ConnectionPollImpl.class) { if(instance == null) { instance = new ConnectionPollImpl(); } } } } return instance; } @Override public synchronized Connection getConnection() { return localConnection.get(); } @Override public void freeLocalConnection() { localConnection.remove(); System.out.println(Thread.currentThread().getName() + "釋放了一個連接"); } @Override public synchronized void destroy() { try { for(Connection connection : freeConnections) { freeConnections.remove(connection); connection.close(); } freeConnections = null; for (Connection connection : activeConnections) { activeConnections.remove(connection); connection.close(); } activeConnections = null; } catch (SQLException e) { e.printStackTrace(); } } @Override public synchronized void status() { System.out.println("當前連接池總連接數為: " + totalSize.get() + " , 空閑連接數為:" + freeConnections.size() + "使用中的連接數為:" + activeConnections.size()); } private synchronized Connection connect() throws SQLException { // 判斷有沒有閑置的連接 if(freeConnections.size() > 0) { //如果有閑置連接,直接拿第一個 Connection connection = freeConnections.get(0); freeConnections.remove(0); //連接可用,返回;不可用,繼續拿 if (isValid(connection)) { activeConnections.add(connection); return connection; } else { return connect(); } } else { //沒有閑置連接, 判斷當前連接池是否飽和 if(totalSize.get() == maxSize) { //如果飽和,等待, 繼續獲取 try { wait(timeOut); } catch (InterruptedException e) { e.printStackTrace(); } return connect(); } else { //沒有飽和,新建一個連接 Connection connection = newConnection(); if(connection != null) { activeConnections.add(connection); return connection; } else { throw new SQLException(); } } } } private synchronized Connection newConnection() throws SQLException { try { Class.forName(this.driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } Connection connection = DriverManager.getConnection(url, username, password); totalSize.incrementAndGet(); return connection; } private boolean isValid(Connection connection) { try { return connection != null && !connection.isClosed(); } catch (SQLException e) { e.printStackTrace(); } return false; } private void loadConfig(){ //讀取配置文件 InputStream in = ConnectionPollImpl.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties p = new Properties(); try { p.load(in); } catch (IOException e) { e.printStackTrace(); } finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } this.username = p.getProperty("jdbc.username"); this.password = p.getProperty("jdbc.password"); this.url = p.getProperty("jdbc.url"); this.driver = p.getProperty("jdbc.driver"); this.maxSize = Integer.valueOf(p.getProperty("noob.maxSize","20")); this.initSize = Integer.valueOf(p.getProperty("noob.initSize","5")); this.timeOut = Long.valueOf(p.getProperty("noob.timeOut","1200")); } }

測試代碼

import java.sql.Connection;
import java.util.Random;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class Test {

    public static void main(String[] args) {
        IConnectionPool connectionPool = ConnectionPollImpl.getInstance();
        
        //開啟一個線程查看連接池的狀態
        ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
        service.scheduleWithFixedDelay(connectionPool::status, 0, 5, TimeUnit.SECONDS);
        
        //開啟20個線程,不斷獲取連接,比較哈希值看同一個線程取出的連接是不是同一個
        for(int i = 0; i < 20; i++) {
            Random random = new Random();
            int count = random.nextInt(30) + 3;
            Thread t = new Thread(() ->{
                try {
                    for (int j = 0; j < count; j++) {
                        Connection connection = connectionPool.getConnection();
                        
                        System.out.println(Thread.currentThread().getName() + "共" + count + "次循環, 目前第" + (j + 1) + "次" + " hashcode :" + connection.hashCode());
                        TimeUnit.SECONDS.sleep(1);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                connectionPool.freeLocalConnection();
            });
            t.setName("test" + i);
            t.start();
        }
    }
}

測試結果, 從結果看基本實現了想要的功能

  1. 控制連接池的大小

  2. 一個線程釋放一個連接後會把連接放回池中給別的線程用

  3. 一個線程始終取出同一個連接

當前連接池總連接數為: 5 , 空閑連接數為:5使用中的連接數為:0
test6共22次循環, 目前第1次 hashcode :691902360
test2共18次循環, 目前第1次 hashcode :708075980
test3共16次循環, 目前第1次 hashcode :1535444742
test4共25次循環, 目前第1次 hashcode :1149790650
test5共15次循環, 目前第1次 hashcode :1825737020
test1共16次循環, 目前第1次 hashcode :2094482202
test0共21次循環, 目前第1次 hashcode :889774551
test18共16次循環, 目前第1次 hashcode :1626524709
test11共17次循環, 目前第1次 hashcode :912223199
test19共28次循環, 目前第1次 hashcode :422379330
test3共16次循環, 目前第2次 hashcode :1535444742
test2共18次循環, 目前第2次 hashcode :708075980
test6共22次循環, 目前第2次 hashcode :691902360
test5共15次循環, 目前第2次 hashcode :1825737020
test4共25次循環, 目前第2次 hashcode :1149790650
test1共16次循環, 目前第2次 hashcode :2094482202
test0共21次循環, 目前第2次 hashcode :889774551
test18共16次循環, 目前第2次 hashcode :1626524709
test11共17次循環, 目前第2次 hashcode :912223199
test19共28次循環, 目前第2次 hashcode :422379330
test2共18次循環, 目前第3次 hashcode :708075980
test4共25次循環, 目前第3次 hashcode :1149790650
test3共16次循環, 目前第3次 hashcode :1535444742
test6共22次循環, 目前第3次 hashcode :691902360
test5共15次循環, 目前第3次 hashcode :1825737020
test1共16次循環, 目前第3次 hashcode :2094482202
test0共21次循環, 目前第3次 hashcode :889774551
test18共16次循環, 目前第3次 hashcode :1626524709
test11共17次循環, 目前第3次 hashcode :912223199
test19共28次循環, 目前第3次 hashcode :422379330
test5共15次循環, 目前第4次 hashcode :1825737020
test2共18次循環, 目前第4次 hashcode :708075980
test6共22次循環, 目前第4次 hashcode :691902360
test3共16次循環, 目前第4次 hashcode :1535444742
test4共25次循環, 目前第4次 hashcode :1149790650
test1共16次循環, 目前第4次 hashcode :2094482202
test0共21次循環, 目前第4次 hashcode :889774551
test18共16次循環, 目前第4次 hashcode :1626524709
test11共17次循環, 目前第4次 hashcode :912223199
test19共28次循環, 目前第4次 hashcode :422379330
test3共16次循環, 目前第5次 hashcode :1535444742
test5共15次循環, 目前第5次 hashcode :1825737020
test6共22次循環, 目前第5次 hashcode :691902360
test4共25次循環, 目前第5次 hashcode :1149790650
test2共18次循環, 目前第5次 hashcode :708075980
test1共16次循環, 目前第5次 hashcode :2094482202
test0共21次循環, 目前第5次 hashcode :889774551
test18共16次循環, 目前第5次 hashcode :1626524709
test11共17次循環, 目前第5次 hashcode :912223199
test19共28次循環, 目前第5次 hashcode :422379330
test3共16次循環, 目前第6次 hashcode :1535444742
test5共15次循環, 目前第6次 hashcode :1825737020
test4共25次循環, 目前第6次 hashcode :1149790650
test2共18次循環, 目前第6次 hashcode :708075980
test6共22次循環, 目前第6次 hashcode :691902360
當前連接池總連接數為: 10 , 空閑連接數為:0使用中的連接數為:10
test1共16次循環, 目前第6次 hashcode :2094482202
test0共21次循環, 目前第6次 hashcode :889774551
test18共16次循環, 目前第6次 hashcode :1626524709
test11共17次循環, 目前第6次 hashcode :912223199
test19共28次循環, 目前第6次 hashcode :422379330
test2共18次循環, 目前第7次 hashcode :708075980
test4共25次循環, 目前第7次 hashcode :1149790650
test6共22次循環, 目前第7次 hashcode :691902360
test3共16次循環, 目前第7次 hashcode :1535444742
test5共15次循環, 目前第7次 hashcode :1825737020
test1共16次循環, 目前第7次 hashcode :2094482202
test0共21次循環, 目前第7次 hashcode :889774551
test18共16次循環, 目前第7次 hashcode :1626524709
test11共17次循環, 目前第7次 hashcode :912223199
test19共28次循環, 目前第7次 hashcode :422379330
test3共16次循環, 目前第8次 hashcode :1535444742
test5共15次循環, 目前第8次 hashcode :1825737020
test2共18次循環, 目前第8次 hashcode :708075980
test6共22次循環, 目前第8次 hashcode :691902360
test4共25次循環, 目前第8次 hashcode :1149790650
test1共16次循環, 目前第8次 hashcode :2094482202
test0共21次循環, 目前第8次 hashcode :889774551
test18共16次循環, 目前第8次 hashcode :1626524709
test11共17次循環, 目前第8次 hashcode :912223199
test19共28次循環, 目前第8次 hashcode :422379330
test5共15次循環, 目前第9次 hashcode :1825737020
test4共25次循環, 目前第9次 hashcode :1149790650
test3共16次循環, 目前第9次 hashcode :1535444742
test2共18次循環, 目前第9次 hashcode :708075980
test6共22次循環, 目前第9次 hashcode :691902360
test1共16次循環, 目前第9次 hashcode :2094482202
test0共21次循環, 目前第9次 hashcode :889774551
test18共16次循環, 目前第9次 hashcode :1626524709
test11共17次循環, 目前第9次 hashcode :912223199
test19共28次循環, 目前第9次 hashcode :422379330
test5共15次循環, 目前第10次 hashcode :1825737020
test6共22次循環, 目前第10次 hashcode :691902360
test3共16次循環, 目前第10次 hashcode :1535444742
test2共18次循環, 目前第10次 hashcode :708075980
test4共25次循環, 目前第10次 hashcode :1149790650
test1共16次循環, 目前第10次 hashcode :2094482202
test0共21次循環, 目前第10次 hashcode :889774551
test18共16次循環, 目前第10次 hashcode :1626524709
test11共17次循環, 目前第10次 hashcode :912223199
test19共28次循環, 目前第10次 hashcode :422379330
當前連接池總連接數為: 10 , 空閑連接數為:0使用中的連接數為:10
test5共15次循環, 目前第11次 hashcode :1825737020
test3共16次循環, 目前第11次 hashcode :1535444742
test6共22次循環, 目前第11次 hashcode :691902360
test4共25次循環, 目前第11次 hashcode :1149790650
test2共18次循環, 目前第11次 hashcode :708075980
test1共16次循環, 目前第11次 hashcode :2094482202
test0共21次循環, 目前第11次 hashcode :889774551
test18共16次循環, 目前第11次 hashcode :1626524709
test11共17次循環, 目前第11次 hashcode :912223199
test19共28次循環, 目前第11次 hashcode :422379330
test2共18次循環, 目前第12次 hashcode :708075980
test5共15次循環, 目前第12次 hashcode :1825737020
test3共16次循環, 目前第12次 hashcode :1535444742
test6共22次循環, 目前第12次 hashcode :691902360
test4共25次循環, 目前第12次 hashcode :1149790650
test1共16次循環, 目前第12次 hashcode :2094482202
test0共21次循環, 目前第12次 hashcode :889774551
test18共16次循環, 目前第12次 hashcode :1626524709
test11共17次循環, 目前第12次 hashcode :912223199
test19共28次循環, 目前第12次 hashcode :422379330
test6共22次循環, 目前第13次 hashcode :691902360
test2共18次循環, 目前第13次 hashcode :708075980
test3共16次循環, 目前第13次 hashcode :1535444742
test5共15次循環, 目前第13次 hashcode :1825737020
test4共25次循環, 目前第13次 hashcode :1149790650
test1共16次循環, 目前第13次 hashcode :2094482202
test0共21次循環, 目前第13次 hashcode :889774551
test18共16次循環, 目前第13次 hashcode :1626524709
test11共17次循環, 目前第13次 hashcode :912223199
test19共28次循環, 目前第13次 hashcode :422379330
test3共16次循環, 目前第14次 hashcode :1535444742
test5共15次循環, 目前第14次 hashcode :1825737020
test6共22次循環, 目前第14次 hashcode :691902360
test4共25次循環, 目前第14次 hashcode :1149790650
test2共18次循環, 目前第14次 hashcode :708075980
test1共16次循環, 目前第14次 hashcode :2094482202
test0共21次循環, 目前第14次 hashcode :889774551
test18共16次循環, 目前第14次 hashcode :1626524709
test11共17次循環, 目前第14次 hashcode :912223199
test19共28次循環, 目前第14次 hashcode :422379330
test2共18次循環, 目前第15次 hashcode :708075980
test5共15次循環, 目前第15次 hashcode :1825737020
test4共25次循環, 目前第15次 hashcode :1149790650
test6共22次循環, 目前第15次 hashcode :691902360
test3共16次循環, 目前第15次 hashcode :1535444742
test1共16次循環, 目前第15次 hashcode :2094482202
test0共21次循環, 目前第15次 hashcode :889774551
test18共16次循環, 目前第15次 hashcode :1626524709
test11共17次循環, 目前第15次 hashcode :912223199
test19共28次循環, 目前第15次 hashcode :422379330
當前連接池總連接數為: 10 , 空閑連接數為:0使用中的連接數為:10
test6共22次循環, 目前第16次 hashcode :691902360
test4共25次循環, 目前第16次 hashcode :1149790650
test5釋放了一個連接
test3共16次循環, 目前第16次 hashcode :1535444742
test2共18次循環, 目前第16次 hashcode :708075980
test1共16次循環, 目前第16次 hashcode :2094482202
test0共21次循環, 目前第16次 hashcode :889774551
test18共16次循環, 目前第16次 hashcode :1626524709
test11共17次循環, 目前第16次 hashcode :912223199
test19共28次循環, 目前第16次 hashcode :422379330
test7共6次循環, 目前第1次 hashcode :1825737020
test2共18次循環, 目前第17次 hashcode :708075980
test3釋放了一個連接
test6共22次循環, 目前第17次 hashcode :691902360
test4共25次循環, 目前第17次 hashcode :1149790650
test1釋放了一個連接
test0共21次循環, 目前第17次 hashcode :889774551
test18釋放了一個連接
test11共17次循環, 目前第17次 hashcode :912223199
test19共28次循環, 目前第17次 hashcode :422379330
test7共6次循環, 目前第2次 hashcode :1825737020
test12共12次循環, 目前第1次 hashcode :2094482202
test15共12次循環, 目前第1次 hashcode :1626524709
test8共31次循環, 目前第1次 hashcode :1535444742
test4共25次循環, 目前第18次 hashcode :1149790650
test2共18次循環, 目前第18次 hashcode :708075980
test6共22次循環, 目前第18次 hashcode :691902360
test0共21次循環, 目前第18次 hashcode :889774551
test11釋放了一個連接
test19共28次循環, 目前第18次 hashcode :422379330
test7共6次循環, 目前第3次 hashcode :1825737020
test8共31次循環, 目前第2次 hashcode :1535444742
test12共12次循環, 目前第2次 hashcode :2094482202
test15共12次循環, 目前第2次 hashcode :1626524709
test4共25次循環, 目前第19次 hashcode :1149790650
test6共22次循環, 目前第19次 hashcode :691902360
test2釋放了一個連接
test0共21次循環, 目前第19次 hashcode :889774551
test13共30次循環, 目前第1次 hashcode :912223199
test19共28次循環, 目前第19次 hashcode :422379330
test14共27次循環, 目前第1次 hashcode :708075980
test7共6次循環, 目前第4次 hashcode :1825737020
test12共12次循環, 目前第3次 hashcode :2094482202
test15共12次循環, 目前第3次 hashcode :1626524709
test8共31次循環, 目前第3次 hashcode :1535444742
test6共22次循環, 目前第20次 hashcode :691902360
test4共25次循環, 目前第20次 hashcode :1149790650
test0共21次循環, 目前第20次 hashcode :889774551
test13共30次循環, 目前第2次 hashcode :912223199
test19共28次循環, 目前第20次 hashcode :422379330
test14共27次循環, 目前第2次 hashcode :708075980
test7共6次循環, 目前第5次 hashcode :1825737020
test8共31次循環, 目前第4次 hashcode :1535444742
test15共12次循環, 目前第4次 hashcode :1626524709
test12共12次循環, 目前第4次 hashcode :2094482202
當前連接池總連接數為: 10 , 空閑連接數為:0使用中的連接數為:10
test6共22次循環, 目前第21次 hashcode :691902360
test4共25次循環, 目前第21次 hashcode :1149790650
test0共21次循環, 目前第21次 hashcode :889774551
test13共30次循環, 目前第3次 hashcode :912223199
test19共28次循環, 目前第21次 hashcode :422379330
test14共27次循環, 目前第3次 hashcode :708075980
test7共6次循環, 目前第6次 hashcode :1825737020
test12共12次循環, 目前第5次 hashcode :2094482202
test8共31次循環, 目前第5次 hashcode :1535444742
test15共12次循環, 目前第5次 hashcode :1626524709
test4共25次循環, 目前第22次 hashcode :1149790650
test6共22次循環, 目前第22次 hashcode :691902360
test0釋放了一個連接
test19共28次循環, 目前第22次 hashcode :422379330
test13共30次循環, 目前第4次 hashcode :912223199
test14共27次循環, 目前第4次 hashcode :708075980
test16共19次循環, 目前第1次 hashcode :889774551
test7釋放了一個連接
test8共31次循環, 目前第6次 hashcode :1535444742
test12共12次循環, 目前第6次 hashcode :2094482202
test15共12次循環, 目前第6次 hashcode :1626524709
test4共25次循環, 目前第23次 hashcode :1149790650
test6釋放了一個連接
test19共28次循環, 目前第23次 hashcode :422379330
test14共27次循環, 目前第5次 hashcode :708075980
test13共30次循環, 目前第5次 hashcode :912223199
test16共19次循環, 目前第2次 hashcode :889774551
test12共12次循環, 目前第7次 hashcode :2094482202
test9共15次循環, 目前第1次 hashcode :691902360
test17共15次循環, 目前第1次 hashcode :1825737020
test8共31次循環, 目前第7次 hashcode :1535444742
test15共12次循環, 目前第7次 hashcode :1626524709
test4共25次循環, 目前第24次 hashcode :1149790650
test19共28次循環, 目前第24次 hashcode :422379330
test14共27次循環, 目前第6次 hashcode :708075980
test13共30次循環, 目前第6次 hashcode :912223199
test16共19次循環, 目前第3次 hashcode :889774551
test8共31次循環, 目前第8次 hashcode :1535444742
test12共12次循環, 目前第8次 hashcode :2094482202
test17共15次循環, 目前第2次 hashcode :1825737020
test9共15次循環, 目前第2次 hashcode :691902360
test15共12次循環, 目前第8次 hashcode :1626524709
test4共25次循環, 目前第25次 hashcode :1149790650
test19共28次循環, 目前第25次 hashcode :422379330
test13共30次循環, 目前第7次 hashcode :912223199
test14共27次循環, 目前第7次 hashcode :708075980
test16共19次循環, 目前第4次 hashcode :889774551
test12共12次循環, 目前第9次 hashcode :2094482202
test9共15次循環, 目前第3次 hashcode :691902360
test17共15次循環, 目前第3次 hashcode :1825737020
test8共31次循環, 目前第9次 hashcode :1535444742
test15共12次循環, 目前第9次 hashcode :1626524709
當前連接池總連接數為: 10 , 空閑連接數為:0使用中的連接數為:10
test4釋放了一個連接
test13共30次循環, 目前第8次 hashcode :912223199
test19共28次循環, 目前第26次 hashcode :422379330
test14共27次循環, 目前第8次 hashcode :708075980
test10共17次循環, 目前第1次 hashcode :1149790650
test16共19次循環, 目前第5次 hashcode :889774551
test9共15次循環, 目前第4次 hashcode :691902360
test12共12次循環, 目前第10次 hashcode :2094482202
test8共31次循環, 目前第10次 hashcode :1535444742
test17共15次循環, 目前第4次 hashcode :1825737020
test15共12次循環, 目前第10次 hashcode :1626524709
test19共28次循環, 目前第27次 hashcode :422379330
test13共30次循環, 目前第9次 hashcode :912223199
test14共27次循環, 目前第9次 hashcode :708075980
test10共17次循環, 目前第2次 hashcode :1149790650
test16共19次循環, 目前第6次 hashcode :889774551
test8共31次循環, 目前第11次 hashcode :1535444742
test17共15次循環, 目前第5次 hashcode :1825737020
test12共12次循環, 目前第11次 hashcode :2094482202
test9共15次循環, 目前第5次 hashcode :691902360
test15共12次循環, 目前第11次 hashcode :1626524709
test14共27次循環, 目前第10次 hashcode :708075980
test13共30次循環, 目前第10次 hashcode :912223199
test19共28次循環, 目前第28次 hashcode :422379330
test10共17次循環, 目前第3次 hashcode :1149790650
test16共19次循環, 目前第7次 hashcode :889774551
test9共15次循環, 目前第6次 hashcode :691902360
test12共12次循環, 目前第12次 hashcode :2094482202
test8共31次循環, 目前第12次 hashcode :1535444742
test17共15次循環, 目前第6次 hashcode :1825737020
test15共12次循環, 目前第12次 hashcode :1626524709
test14共27次循環, 目前第11次 hashcode :708075980
test19釋放了一個連接
test13共30次循環, 目前第11次 hashcode :912223199
test10共17次循環, 目前第4次 hashcode :1149790650
test16共19次循環, 目前第8次 hashcode :889774551
test9共15次循環, 目前第7次 hashcode :691902360
test12釋放了一個連接
test17共15次循環, 目前第7次 hashcode :1825737020
test8共31次循環, 目前第13次 hashcode :1535444742
test15釋放了一個連接
test13共30次循環, 目前第12次 hashcode :912223199
test14共27次循環, 目前第12次 hashcode :708075980
test10共17次循環, 目前第5次 hashcode :1149790650
test16共19次循環, 目前第9次 hashcode :889774551
test9共15次循環, 目前第8次 hashcode :691902360
test8共31次循環, 目前第14次 hashcode :1535444742
test17共15次循環, 目前第8次 hashcode :1825737020
當前連接池總連接數為: 10 , 空閑連接數為:3使用中的連接數為:7
test14共27次循環, 目前第13次 hashcode :708075980
test13共30次循環, 目前第13次 hashcode :912223199
test10共17次循環, 目前第6次 hashcode :1149790650
test16共19次循環, 目前第10次 hashcode :889774551
test8共31次循環, 目前第15次 hashcode :1535444742
test17共15次循環, 目前第9次 hashcode :1825737020
test9共15次循環, 目前第9次 hashcode :691902360
test14共27次循環, 目前第14次 hashcode :708075980
test13共30次循環, 目前第14次 hashcode :912223199
test10共17次循環, 目前第7次 hashcode :1149790650
test16共19次循環, 目前第11次 hashcode :889774551
test17共15次循環, 目前第10次 hashcode :1825737020
test8共31次循環, 目前第16次 hashcode :1535444742
test9共15次循環, 目前第10次 hashcode :691902360
test13共30次循環, 目前第15次 hashcode :912223199
test14共27次循環, 目前第15次 hashcode :708075980
test10共17次循環, 目前第8次 hashcode :1149790650
test16共19次循環, 目前第12次 hashcode :889774551
test8共31次循環, 目前第17次 hashcode :1535444742
test9共15次循環, 目前第11次 hashcode :691902360
test17共15次循環, 目前第11次 hashcode :1825737020
test13共30次循環, 目前第16次 hashcode :912223199
test14共27次循環, 目前第16次 hashcode :708075980
test10共17次循環, 目前第9次 hashcode :1149790650
test16共19次循環, 目前第13次 hashcode :889774551
test17共15次循環, 目前第12次 hashcode :1825737020
test8共31次循環, 目前第18次 hashcode :1535444742
test9共15次循環, 目前第12次 hashcode :691902360
test13共30次循環, 目前第17次 hashcode :912223199
test14共27次循環, 目前第17次 hashcode :708075980
test10共17次循環, 目前第10次 hashcode :1149790650
test16共19次循環, 目前第14次 hashcode :889774551
test9共15次循環, 目前第13次 hashcode :691902360
test8共31次循環, 目前第19次 hashcode :1535444742
test17共15次循環, 目前第13次 hashcode :1825737020
當前連接池總連接數為: 10 , 空閑連接數為:3使用中的連接數為:7
test13共30次循環, 目前第18次 hashcode :912223199
test14共27次循環, 目前第18次 hashcode :708075980
test10共17次循環, 目前第11次 hashcode :1149790650
test16共19次循環, 目前第15次 hashcode :889774551
test8共31次循環, 目前第20次 hashcode :1535444742
test9共15次循環, 目前第14次 hashcode :691902360
test17共15次循環, 目前第14次 hashcode :1825737020
test14共27次循環, 目前第19次 hashcode :708075980
test13共30次循環, 目前第19次 hashcode :912223199
test10共17次循環, 目前第12次 hashcode :1149790650
test16共19次循環, 目前第16次 hashcode :889774551
test8共31次循環, 目前第21次 hashcode :1535444742
test9共15次循環, 目前第15次 hashcode :691902360
test17共15次循環, 目前第15次 hashcode :1825737020
test13共30次循環, 目前第20次 hashcode :912223199
test14共27次循環, 目前第20次 hashcode :708075980
test10共17次循環, 目前第13次 hashcode :1149790650
test16共19次循環, 目前第17次 hashcode :889774551
test8共31次循環, 目前第22次 hashcode :1535444742
test17釋放了一個連接
test9釋放了一個連接
test13共30次循環, 目前第21次 hashcode :912223199
test14共27次循環, 目前第21次 hashcode :708075980
test10共17次循環, 目前第14次 hashcode :1149790650
test16共19次循環, 目前第18次 hashcode :889774551
test8共31次循環, 目前第23次 hashcode :1535444742
test13共30次循環, 目前第22次 hashcode :912223199
test14共27次循環, 目前第22次 hashcode :708075980
test10共17次循環, 目前第15次 hashcode :1149790650
test16共19次循環, 目前第19次 hashcode :889774551
test8共31次循環, 目前第24次 hashcode :1535444742
當前連接池總連接數為: 10 , 空閑連接數為:5使用中的連接數為:5
test14共27次循環, 目前第23次 hashcode :708075980
test13共30次循環, 目前第23次 hashcode :912223199
test10共17次循環, 目前第16次 hashcode :1149790650
test16釋放了一個連接
test8共31次循環, 目前第25次 hashcode :1535444742
test13共30次循環, 目前第24次 hashcode :912223199
test14共27次循環, 目前第24次 hashcode :708075980
test10共17次循環, 目前第17次 hashcode :1149790650
test8共31次循環, 目前第26次 hashcode :1535444742
test14共27次循環, 目前第25次 hashcode :708075980
test13共30次循環, 目前第25次 hashcode :912223199
test10釋放了一個連接
test8共31次循環, 目前第27次 hashcode :1535444742
test14共27次循環, 目前第26次 hashcode :708075980
test13共30次循環, 目前第26次 hashcode :912223199
test8共31次循環, 目前第28次 hashcode :1535444742
test13共30次循環, 目前第27次 hashcode :912223199
test14共27次循環, 目前第27次 hashcode :708075980
test8共31次循環, 目前第29次 hashcode :1535444742
當前連接池總連接數為: 10 , 空閑連接數為:7使用中的連接數為:3
test13共30次循環, 目前第28次 hashcode :912223199
test14釋放了一個連接
test8共31次循環, 目前第30次 hashcode :1535444742
test13共30次循環, 目前第29次 hashcode :912223199
test8共31次循環, 目前第31次 hashcode :1535444742
test13共30次循環, 目前第30次 hashcode :912223199
test8釋放了一個連接
test13釋放了一個連接
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0
當前連接池總連接數為: 10 , 空閑連接數為:10使用中的連接數為:0

【java】簡單實現數據庫連接池