代理模式
来源:互联网 发布:js生成随机整数 编辑:程序博客网 时间:2024/05/26 02:21
package all;
//这是我的代理主题类
import java.sql.Connection;
import com.mysql.jdbc.Extension;
import com.mysql.jdbc.log.Log;
public class MyConnection implements Connection {
private Connection myconnecyion;
private createConnectionPool ccp;
MyConnection(Connection con, createConnectionPool ccp) {
this.myconnecyion = con;
this.ccp = ccp;
}
@Override
public void close() throws SQLException {
this.ccp.cp.add(myconnecyion);
}
//这是我对外提供方法和访问的类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;
public class createConnectionPool {
private String url = "jdbc:mysql://localhost:3306/student";
private String username = "root";
private String password = "123";
private int count = 0;
private int maxcount = 4;
private int mincount =2;
LinkedList<Connection> cp = new LinkedList<Connection>();
public void dataSourse() throws Exception {
for (int i = 0; i < mincount; i++) {
cp.addLast(create());
count++;
}
}
public MyConnection getConnection() throws Exception {
synchronized (cp) {
if (cp.size() > 0)
return (MyConnection)cp.removeFirst();
if (count < maxcount) {
count++;
return create();
}
throw new SQLException("链接数达到最大");
}
}
public void free(MyConnection conn) {
cp.add(conn);
}
private MyConnection create() throws Exception {
Connection con = DriverManager.getConnection(url, username, password);
MyConnection mc = new MyConnection(con, this);
return mc;
}
}
//这是我的测试代码
package all;
public class test {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
createConnectionPool cp = new createConnectionPool();
cp.dataSourse();
for (int i = 0; i < 5; i++) {
MyConnection con = cp.getConnection();
System.out.println(con);
con.close();
}
}
}
//错误,前面两条结果是正确的,后面理论上也应该是MyConnection的链接,出来的却不是,而且,拿出来的链接似乎没放回去,有没有大牛啊,求解?!!!
all.MyConnection@15212bc
all.MyConnection@14c1103
all.MyConnection@f11404
com.mysql.jdbc.JDBC4Connection@1592174
com.mysql.jdbc.JDBC4Connection@97a560
/* 明白了,刚刚找出错误,因为在MyConnection类中的close方法中错误地将myconnecyion返回到链接池中,myconnecyion是Connection链接,而非MyConnection链接,*将myconnecyion改为this即可。
*/
- 代理模式--动态代理
- 代理模式-静态代理
- 代理模式-静态代理
- 代理模式 & 动态代理
- 代理模式--静态代理
- 代理模式--动态代理
- 代理模式(动态代理)
- 代理模式-动态代理
- 代理模式-动态代理
- 代理模式动态代理
- 代理模式-静态代理
- 代理模式-动态代理
- 代理模式 -动态代理
- 代理模式---动态代理
- 代理模式-动态代理
- 代理模式--静态代理
- 代理模式!
- 代理模式
- linux core dump
- Servlet自学第27讲:Session与Cookie对比总结
- SPA(Single-page application) 单页应用
- LAMP网站性能优化
- 集合总结(三)
- 代理模式
- Java多线程总结
- destoon去掉版权
- Netty那点事(二)Netty中的buffer
- Cookie小案例
- win7重定向函数引发的问题
- 明源售楼系统技术解析—诚意认购(一)
- 使用Xcode和Instruments调试解决iOS内存泄露
- 客运综合管理系统项目解析-检票管理-检票