【java】简单实现数据库连接池

一直在想 java 事务是怎么实现的,在原声 jdbc 的时候级别下,我们可以通过关掉 autocommit 然后再手动 commit。但是项目开发中基本上是看不见 conection 的。所以自己决定简单实现框架的一点皮毛功能。首先就是数据库连接池了

1. 先定义一个接口

import java.sql.Connection;

public interface IConnectionPool {

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 获取一个连接
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
 <span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
Connection getConnection();

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 用完后调用,把连接放回池中,实现复用
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> freeLocalConnection();

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 销毁连接池
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> destroy();

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">测试用</span>
<span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> 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{

</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String username;
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String password;
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String url;
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> String driver;

</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> Integer maxSize;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> Integer initSize = 5<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> timeOut;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">连接总数</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> AtomicInteger totalSize = <span style="color: rgba(0, 0, 255, 1)">new</span> AtomicInteger(0<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">空闲的连接</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> List&lt;Connection&gt; freeConnections = <span style="color: rgba(0, 0, 255, 1)">new</span> Vector&lt;&gt;<span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">已经被使用的连接</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> List&lt;Connection&gt; activeConnections = <span style="color: rgba(0, 0, 255, 1)">new</span> Vector&lt;&gt;<span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">存储当前线程的连接, 事务控制的关键</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> ThreadLocal&lt;Connection&gt; localConnection = <span style="color: rgba(0, 0, 255, 1)">new</span> ThreadLocal&lt;Connection&gt;<span style="color: rgba(0, 0, 0, 1)">(){

    </span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
     * 第一次调用get()方法时执行
     * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
     <span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
    @Override
    </span><span style="color: rgba(0, 0, 255, 1)">protected</span><span style="color: rgba(0, 0, 0, 1)"> Connection initialValue() {
        </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> connect();
        } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (SQLException e) {
            e.printStackTrace();
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    }

    @Override
    </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> remove() {
        Connection connection </span>=<span style="color: rgba(0, 0, 0, 1)"> get();
        activeConnections.remove(connection);
        freeConnections.add(connection);
        </span><span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">.remove();
    }
};

</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> ConnectionPollImpl instance;



</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> ConnectionPollImpl() {
    loadConfig();
    init();
}


</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> init() {
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">int</span> i=0;i &lt; initSize;i++<span style="color: rgba(0, 0, 0, 1)">){
            freeConnections.add(newConnection());
        }
    } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (SQLException e) {
        e.printStackTrace();
    }

}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> ConnectionPollImpl getInstance() {
    </span><span style="color: rgba(0, 0, 255, 1)">synchronized</span> (ConnectionPollImpl.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">) {
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (instance == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
            </span><span style="color: rgba(0, 0, 255, 1)">synchronized</span> (ConnectionPollImpl.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">) {
                </span><span style="color: rgba(0, 0, 255, 1)">if</span>(instance == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
                    instance </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ConnectionPollImpl();
                }
            }
        }
    }
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> instance;
}



@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">synchronized</span><span style="color: rgba(0, 0, 0, 1)"> Connection getConnection() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> localConnection.get();
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> freeLocalConnection() {
    localConnection.remove();
    System.out.println(Thread.currentThread().getName() </span>+ "释放了一个连接"<span style="color: rgba(0, 0, 0, 1)">);

}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">synchronized</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> destroy() {
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)">(Connection connection : freeConnections) {
            freeConnections.remove(connection);
            connection.close();
        }
        freeConnections </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
        </span><span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> (Connection connection : activeConnections) {
            activeConnections.remove(connection);
            connection.close();
        }
        activeConnections </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (SQLException e) {
        e.printStackTrace();
    }


}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">synchronized</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> status() {

    System.out.println(</span>"当前连接池总连接数为: " + totalSize.get() + " , 空闲连接数为:" + freeConnections.size() + "使用中的连接数为:" +<span style="color: rgba(0, 0, 0, 1)"> activeConnections.size());

}

</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">synchronized</span> Connection connect() <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> SQLException {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 判断有没有闲置的连接</span>
    <span style="color: rgba(0, 0, 255, 1)">if</span>(freeConnections.size() &gt; 0<span style="color: rgba(0, 0, 0, 1)">) {
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果有闲置连接,直接拿第一个</span>
        Connection connection = freeConnections.get(0<span style="color: rgba(0, 0, 0, 1)">);
        freeConnections.remove(</span>0<span style="color: rgba(0, 0, 0, 1)">);
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">连接可用,返回;不可用,继续拿</span>
        <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (isValid(connection)) {
            activeConnections.add(connection);
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> connection;
        } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> connect();
        }
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">没有闲置连接, 判断当前连接池是否饱和</span>
        <span style="color: rgba(0, 0, 255, 1)">if</span>(totalSize.get() ==<span style="color: rgba(0, 0, 0, 1)"> maxSize) {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果饱和,等待, 继续获取</span>
            <span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
                wait(timeOut);
            } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (InterruptedException e) {
                e.printStackTrace();
            }
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> connect();
        } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">没有饱和,新建一个连接</span>
            Connection connection =<span style="color: rgba(0, 0, 0, 1)"> newConnection();
            </span><span style="color: rgba(0, 0, 255, 1)">if</span>(connection != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
                activeConnections.add(connection);
                </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> connection;
            } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
                </span><span style="color: rgba(0, 0, 255, 1)">throw</span> <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> SQLException();
            }
        }
    }
}



</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">synchronized</span> Connection newConnection() <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> SQLException {
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        Class.forName(</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.driver);
    } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (ClassNotFoundException e) {
        e.printStackTrace();
    }
    Connection connection </span>=<span style="color: rgba(0, 0, 0, 1)">  DriverManager.getConnection(url, username, password);
    totalSize.incrementAndGet();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> connection;
}

</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> isValid(Connection connection) {
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> connection != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; !<span style="color: rgba(0, 0, 0, 1)">connection.isClosed();
    } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (SQLException e) {
        e.printStackTrace();
    }
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
}




</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> loadConfig(){
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">读取配置文件</span>
    InputStream in = ConnectionPollImpl.<span style="color: rgba(0, 0, 255, 1)">class</span>.getClassLoader().getResourceAsStream("jdbc.properties"<span style="color: rgba(0, 0, 0, 1)">);
    Properties p </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Properties();
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        p.load(in);
    } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (IOException e) {
        e.printStackTrace();
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
            in.close();
        } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (IOException e) {
            e.printStackTrace();
        }
    }
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.username = p.getProperty("jdbc.username"<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.password = p.getProperty("jdbc.password"<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.url = p.getProperty("jdbc.url"<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.driver = p.getProperty("jdbc.driver"<span style="color: rgba(0, 0, 0, 1)">);

    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.maxSize = Integer.valueOf(p.getProperty("noob.maxSize","20"<span style="color: rgba(0, 0, 0, 1)">));
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.initSize = Integer.valueOf(p.getProperty("noob.initSize","5"<span style="color: rgba(0, 0, 0, 1)">));
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.timeOut = Long.valueOf(p.getProperty("noob.timeOut","1200"<span style="color: rgba(0, 0, 0, 1)">));

}

}

 测试代码

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 {

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> main(String[] args) {
    IConnectionPool connectionPool </span>=<span style="color: rgba(0, 0, 0, 1)"> ConnectionPollImpl.getInstance();
    
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">开启一个线程查看连接池的状态</span>
    ScheduledExecutorService service = Executors.newScheduledThreadPool(1<span style="color: rgba(0, 0, 0, 1)">);
    service.scheduleWithFixedDelay(connectionPool::status, </span>0, 5<span style="color: rgba(0, 0, 0, 1)">, TimeUnit.SECONDS);
    
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">开启20个线程,不断获取连接,比较哈希值看同一个线程取出的连接是不是同一个</span>
    <span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i &lt; 20; i++<span style="color: rgba(0, 0, 0, 1)">) {
        Random random </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Random();
        </span><span style="color: rgba(0, 0, 255, 1)">int</span> count = random.nextInt(30) + 3<span style="color: rgba(0, 0, 0, 1)">;
        Thread t </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> Thread(() -&gt;<span style="color: rgba(0, 0, 0, 1)">{
            </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
                </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> j = 0; j &lt; count; j++<span style="color: rgba(0, 0, 0, 1)">) {
                    Connection connection </span>=<span style="color: rgba(0, 0, 0, 1)"> connectionPool.getConnection();
                    
                    System.out.println(Thread.currentThread().getName() </span>+ "共" + count + "次循环, 目前第" + (j + 1) + "次" + " hashcode :" +<span style="color: rgba(0, 0, 0, 1)"> connection.hashCode());
                    TimeUnit.SECONDS.sleep(</span>1<span style="color: rgba(0, 0, 0, 1)">);
                }
            } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (InterruptedException e) {
                e.printStackTrace();
            }
            connectionPool.freeLocalConnection();
        });
        t.setName(</span>"test" +<span style="color: rgba(0, 0, 0, 1)"> 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