java 线程 连接池_java程序实现线程连接池功能

下面是以前学java 的时候写的一个实现,没有考虑很多,比如同步处理等等。懒得改,你就看看吧。

package com.wangjia.tools;

import java.io.Serializable;

import java.sql.*;

import java.util.*;

/**

*数据库连接池的简单实现

* @author wangjia

* @version 1.0

*@serial 2301410997974776106L

*/

public class DbConn implements Serializable{

/**

*

*/

private static final long serialVersionUID = 2301410997974776106L;

private static List connList=new ArrayList();

//private static String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";//sql2000

private static String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";//sql2005

private static String url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Forum";

private static String userName="sa";

private static String password="sa";

private static int maxConn=20;

private static int minConn=5;

private static int usedConn=0;

private static DbConn dbconn=null;

// private static int flag=1;

/**

* 设置数据库连接的驱动

* @param driver数据库连接的驱动
例如:"com.microsoft.sqlserver.jdbc.SQLServerDriver"

*/

public static void setDriver(String driver) {

DbConn.driver = driver;

}

/**

* 设置数据库连接池的最小数量

* @param maxConn 数据库连接池的最小数量

*/

public static void setMaxConn(int maxConn) {

DbConn.maxConn = maxConn;

}

/**

* 设置数据库连接池的最大数量

* @param minConn 数据库连接池的最大数量

*/

public static void setMinConn(int minConn) {

DbConn.minConn = minConn;

}

/**

* 设置数据库连接的URL

* @param url 数据库连接的URL,包括数据库的名称
例如: "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=master"

*/

public static void setUrl(String url) {

DbConn.url = url;

}

private DbConn() throws MyException{

try{

Class.forName(driver);

for(int i=0;i

connList.add(DriverManager.getConnection(url,userName.toString(),password.toString()));

}

}catch(ClassNotFoundException e){

throw new MyException("请设置正确的数据库连接驱动!\nusing: DbConn.setDriver(String driver)");

}catch(SQLException e){

throw new MyException("请设置正确的数据库连接URL以及用于连接的用户名和密码!\n" +

"using: DbConn.setUrl(String url),DbConn.setUserName(String userName),DbConn.setPassword(String password)");

}

}

/**

* 用于得到DbConn对象

* @return 返回一个DbConn对像

*/

public static Connection getConn() throws MyException{

// flag++;

if(dbconn==null)dbconn=new DbConn();

// System.out.println("falg="+flag);

// System.out.println("usedConn="+usedConn);

if(connList.size()==0){

throw new MyException("没有正确的设置相关信息,以至连接池未初始化");

}

if(usedConn==maxConn){

Thread thread=new Thread(new Runnable(){

@SuppressWarnings("static-access")

public void run() {

if(usedConn

try {

try {

Thread.currentThread().sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

getConn();

} catch (MyException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

});

thread.start();

}

if(usedConn>=minConn&&usedConn

try {

connList.add(DriverManager.getConnection(url,userName.toString(),password.toString()));

} catch (SQLException e) {

}

return connList.get(usedConn++);

}

if(usedConn<5){

return connList.get(usedConn++);

}

return null;

}

public static void close(){

try {

if(usedConn>5)

connList.get(--usedConn).close();

else usedConn--;

} catch (SQLException e) {

// TODO 自动生成 catch 块

e.printStackTrace();

}

}

/**

* 设置用于连接数据库的密码

* @param password 用于连接数据库的密码

*/

public static void setPassword(String password) {

DbConn.password = password;

}

/**

* 设置用于连接数据库的用户名

* @param userName 用于连接数据库的用户名

*/

public static void setUserName(String userName) {

DbConn.userName = userName;

}

}

在项目中用到连接池的话,一般会直接使用已有的开源连接池实现,比如用 apache 的common-dbcp.jar和common-pool.jar 相结合,很少去自己实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值