使用包装设计模式,实现标准连接池
2014-02-19 19:21
274 查看
public class MyDataSource implements DataSource{ private LinkedList<Connection> pool = new LinkedList<Connection>(); public MyDataSource() { String driverClassName = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/oa"; String username = "root"; String password = "root"; try { Class.forName(driverClassName); for(int i=0; i<3; i++){ Connection conn = DriverManager.getConnection(url, username, password); // conn-->com.mysql.jdbc.Jdbc4Connection@df255 // 对上述conn,进行包装。myConnection-->standardConnPool.MyDataSource$MyConnection@1e13d52 MyConnectionWrapper myConnection = new MyConnectionWrapper(conn); // 将包装的Connection类,放入到pool中 pool.add(myConnection); } } catch (Exception e) { e.printStackTrace(); } } public Connection getConnection() throws SQLException { synchronized (pool) { // 如果线程池中的Connection大小为0,等待 if(pool.size() == 0){ try { pool.wait(); } catch (InterruptedException e) { e.printStackTrace(); } return getConnection(); } Connection conn = pool.removeFirst(); System.out.println("size :" + pool.size() + " " + conn); return conn; } } /** * 内部类,对Connection进行包装。重写close方法 * @author zhurudong * */ class MyConnectionWrapper implements Connection { private Connection connection; public MyConnectionWrapper(Connection connection) { this.connection = connection; } public void close() throws SQLException { synchronized (pool) { System.out.println("对象:" + this + " 关闭连接"); // 把要关闭连接的对象,重新放回pool中。唤醒正在wait的线程 pool.add(this); pool.notify(); } }
相关文章推荐
- C#中标准Dispose模式的实现与使用(条目17 实现标准的销毁模式)
- 使用包装设计模式实现自己的数据源
- linux窗口程序设计 Qt4精彩实例分析 pyqt实现 实例2 标准对话框的使用
- 使用Object-C实现23种设计模式之单例模式
- 使用Xcode DEBUG模式和RELEASE模式 ... 宏定义实现注释功能
- 设计模式应用之使用COMPOSITE模式实现流程(三)
- 使用 IBM 中间件实现 SaaS 解决方案,第 4 部分: 单一实例多租户应用程序中资源共享的设计模式
- 使用C++实现设计模式(连载): 第二回 Factory 工厂模式
- 多线程---使用ManualResetEvent来控制线程间的同步(实现了消费者和生产者模式)
- 使用Biztalk Server实现基于消息的状态机设计模式
- 以【猫叫、老鼠跑、主人醒】为例子,使用 javascript 来实现 观察者模式 (有在线演示)
- 彻底学会使用epoll(一)——ET模式实现分析
- C++ 使用模版范式写一个单例模式的类--简单实现单例模式
- MVP模式使用Retrofit+RxJAVA请求数据实现购物车
- Python使用logging结合decorator模式实现优化日志输出的方法
- Factory 模式:c语言实现和使用
- 使用GreyBox实现Ajax模式窗口
- 使用WinIO库实现保护模式下的IO和内存读写(_inp,_outp)
- 使用ASP.Net Forms模式实现WebService身份验证
- JDBC连接池:自定义连接池:方法增强(使用装饰者设计模式增强)(接上篇)