手动实现连接池
package com.offcn.Mypool01;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
import com.offcn.utils.JdbcUtils;
/*
*作者: 中公-qf_meng
*时间:2020年7月6日 上午10:33:55
*描述: 手动实现连接池
*/
public class MyDBConnectionPool {
//clist是一个连接池
private static List<Connection> clist=new ArrayList<Connection>();
private static int num=5;
//1.当java应用程序初始的时候,默认存放一些连接到连接池
static {
for(int i=1;i<=num;i++) {
clist.add(JdbcUtils.getConnetion());
}
System.out.println("连接池初始化的连接数量为:"+clist.size());
}
//2.获取连接
public static Connection getConnection() {
System.out.println("======获取连接=======");
Connection connection=null;
//判断连接池中是否还有连接
if(clist.size()>0) {
//获取连接
connection=clist.get(0);
//把获取到的在集合中删除
clist.remove(0);
}else {
System.out.println("等待连接2s.....");
//等待连接2s
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//再次获取连接
connection=getConnection();
}
System.out.println("获取连接后===连接池的连接数量为-----"+clist.size());
return connection;
}
//3.关闭连接
public static void closeConnection(Connection connection) {
System.out.println("=====归还连接=======");
if(connection!=null) {
//把连接还给连接池
clist.add(connection);
}
System.out.println("归还连后==连接池的连接数量为-----"+clist.size());
}
}
- 测试类:
package com.offcn.test;
import java.sql.Connection;
import com.offcn.Mypool01.MyDBConnectionPool;
/*
*作者: 中公-qf_meng
*时间:2020年7月6日 上午10:46:49
*描述:
*/
public class MyDBConnectionPoolTest {
public static void main(String[] args) {
//获取连接
//Connection connection = MyDBConnectionPool.getConnection();
//System.out.println(connection);
//关闭连接
//MyDBConnectionPool.closeConnection(connection);
for (int i = 1; i <=8; i++) {
Connection connection = MyDBConnectionPool.getConnection();
}
}
}