【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<Connection> freeConnections = <span style="color: rgba(0, 0, 255, 1)">new</span> Vector<><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<Connection> activeConnections = <span style="color: rgba(0, 0, 255, 1)">new</span> Vector<><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<Connection> localConnection = <span style="color: rgba(0, 0, 255, 1)">new</span> ThreadLocal<Connection><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 < 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() > 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> && !<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 < 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(() -><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 < 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