当前位置: 首页> 学习园地

新mg电子游戏手机版实训-思想过度-连接池(六)-哈尔滨Java培训

2017-12-18 08:57:58更新

哈尔滨Java培训

思想过度-连接池(六)-连接池产生的Connection是被包装之后的类

 

//sun公司开发一套连接池的接口规范DataSource,自定义的连接池,要实现这个规范

//这回实现连接池,使用的是实现sun公司的接口

public class MyDataSource implements DataSource{

// 创建一个连接的池子--集合,线程安全的问题

private static LinkedList<Connection> pool = (LinkedList<Connection>) Collections

.synchronizedList(new LinkedList<Connection>());

 

// 在连接池中初始化10个连接

static {

try {

for (int i = 0; i < 10; i++) {

Connection conn = DBUtil.getConnection();

pool.add(conn);

}

} catch (Exception e) {

// 将异常向上抛

throw new ExceptionInInitializerError("初始化连接池失败!");

}

}

 

// 重写getConnection()方法

@Override

public Connection getConnection() throws SQLException {

Connection conn = null;

if(pool.size()>0){ //说明池子里还有连接

  conn =  pool.removeFirst();  //移除并返回对象

  Connection myConn = new DecoratorConnection(conn,pool); //得到一个包装后的Connection对象

  return myConn;

}else{

  throw new RuntimeException("服务器正忙.......");

  //服务器正忙的解决思路:

  //1.等待

  //2.等待超时新创建一个连接用DBUtil产生,用完之后,不用交回池,真的close()

}

}

// 其余方法实现……

@Override

public PrintWriter getLogWriter() throws SQLException {

// TODO Auto-generated method stub

return null;

}

哈尔滨Java培训