java手写数据库连接词_手写数据库连接池

package com.db;

import com.mysql.jdbc.Connection;

import java.io.IOException;

import java.io.InputStream;

import java.sql.SQLException;

import java.util.Collections;

import java.util.LinkedList;

import java.util.List;

import java.util.Properties;

import java.util.concurrent.ConcurrentLinkedQueue;public classDbPool {private static String PROP_PATH = "db.properties";private static String max = null;private static String min = null;private static int poolSize = 0; //记录连接池中的数量

privateDbPool(){}//private static List pool = Collections.synchronizedList(new LinkedList());//让LinkedList变成线程安全的

private static ConcurrentLinkedQueue pool = new ConcurrentLinkedQueue();//更加高效的线程安全容器

static{if (poolSize == 0 &&pool.isEmpty()) {

synchronized (DbPool.class) {if (poolSize == 0 &&pool.isEmpty()) {try{

System.out.println("连接池为空,初始化");

InputStreamin = DbUtil.class.getClassLoader().getResourceAsStream(PROP_PATH);

Properties props= newProperties();

props.load(in);

max= props.getProperty("max");

min= props.getProperty("min");for (int i = 0; i < Integer.parseInt(min); i++) {

pool.add(DbUtil.getConnection());

poolSize++;

}

}catch(IOException ex) {

ex.printStackTrace();

}

}

}

}

}public staticConnection getConnection() {try{if (!pool.isEmpty()) {

System.out.println("连接池非空,直接返回");//return (pool).removeFirst();

returnpool.remove();

}else{

System.out.println("连接池为空,进行扩容");

expland(5);

System.out.println("等待获取");while (true) {if (!pool.isEmpty()) {

System.out.println("获取成功,返回");//return pool.removeFirst();

returnpool.remove();

}

}

}

}catch(Exception ex) {

ex.printStackTrace();return null;

}

}/**

* 销毁连接池*/

public static voiddistory(){for(Connection conn : pool) {try{

conn.close();

pool.remove(conn);

}catch(SQLException e) {

e.printStackTrace();

}

}

poolSize= 0;

System.out.println("销毁成功,未使用:" + getAvaliableSize() + "总数:" +getPoolSize());

}/**

* 回收连接

* @param conn*/

public static voidrecycle(Connection conn){

pool.add(conn);

System.out.println("回收成功,未使用:" + getAvaliableSize() + "总数:" +getPoolSize());

}/**

* 获取当前连接池有多少个连接,包括已使用和未使用

* @return*/

public static intgetPoolSize(){returnpoolSize;

}/**

* 获取未使用的数量

* @return*/

public static intgetAvaliableSize(){returnpool.size();

}/**

* 线程池扩容

* @num 增加的数量*/

private static void expland(intnum) {if (poolSize >Integer.parseInt(max)) {

System.out.println("总连接数量大于最大值,直接返回");return;

}for (int i=0; i

pool.add(DbUtil.getConnection());

poolSize++;

}

System.out.println("扩容成功,未使用:" + getAvaliableSize() + "总数:" +getPoolSize());

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值