package com.util; import java.sql.Connection; import java.sql.DriverManager; import java.util.Enumeration; import java.util.Hashtable; import java.util.LinkedList; import java.util.List; /** * 数据库连接池简单实现 */ public class ConnectionPool { private List<Connection> freeConnections = new LinkedList<Connection>(); private Hashtable<Thread,Connection> boundConnections = new Hashtable<Thread,Connection>(); private int count = 10; private String driver = "com.mysql.jdbc.Driver"; private String url = "jdbc:mysql://localhost:3306/sampledb?useUnicode=true&characterEncoding=UTF-8"; private String username = "root"; private String password = "123456"; public void init() throws Exception { Class.forName(driver); for(int i = 0; i < count; i++) { Connection con = DriverManager.getConnection(url, username,password); freeConnections.add(con); } } public synchronized Connection getConnection() { Connection con = boundConnections.get(Thread.currentThread()); if(con != null) { return con; } while(freeConnections.size() == 0) { try { wait(); } catch (InterruptedException e) {} } synchronized(this) { con = freeConnections.remove(0); boundConnections.put(Thread.currentThread(), con); } return con; } public synchronized void releaseConnection() { synchronized(this) { Connection con = boundConnections.remove(Thread.currentThread()); if(con != null) { freeConnections.add(con); try { notify(); } catch(Exception e) {} } } } public void destroy() throws Exception { for(Connection con : freeConnections) { if(con != null) { con.close(); } } freeConnections.clear(); Enumeration<Connection> ee = boundConnections.elements(); while(ee.hasMoreElements()) { Connection con = ee.nextElement(); if(con != null) { con.close(); } } boundConnections.clear(); freeConnections = null; boundConnections = null; } }