使用包装设计模式,实现标准连接池

发布时间:2016-12-8 6:14:02 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"使用包装设计模式,实现标准连接池",主要涉及到使用包装设计模式,实现标准连接池方面的内容,对于使用包装设计模式,实现标准连接池感兴趣的同学可以参考一下。

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-->[email protected] // 对上述conn,进行包装。myConnection-->[email protected] 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(); } }

上一篇:CEdit 清空、设置多行显示
下一篇:C#多线程编程实践

相关文章

相关评论