博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态代理写connection连接池Demo
阅读量:6629 次
发布时间:2019-06-25

本文共 3948 字,大约阅读时间需要 13 分钟。

1 public class JdbcUtil2 { 2     //声明连接池
<放到linkedlist中,操作其中对象的速度快 只需要改变连接>
3 private static LinkedList
connectionspool=new LinkedList
(); 4 //静态代码块 5 static{ 6 try { 7 String url="jdbc:mysql://localhost:3306/jdbcdb"; 8 String user="root"; 9 String password="mysql";10 Class.forName("com.mysql.jdbc.Driver");11 //创建3个连接并将它们代理12 for(int i=0;i<3;i++)13 {14 final Connection conn=DriverManager.getConnection(url, user, password);15 //对conn进行代理16 Object proxyobj= Proxy.newProxyInstance(17 JdbcUtil2.class.getClassLoader(), 18 new Class[]{Connection.class},19 new InvocationHandler() { 20 public Object invoke(Object proxy, Method method, Object[] args)21 throws Throwable {22 //是否是close方法23 if(method.getName().equals("close"))24 {25 synchronized(connectionspool){26 connectionspool.addLast((Connection)proxy);27 connectionspool.notify();28 }29 return null;//如果调用的是close()方法,不会调用代理类的方法,会调用代理30 }31 return method.invoke(conn, args);32 }33 });34 35 connectionspool.add((Connection)proxyobj);36 37 }38 } catch (SQLException e) {39 // TODO Auto-generated catch block40 e.printStackTrace();41 } catch (ClassNotFoundException e) {42 // TODO Auto-generated catch block43 e.printStackTrace();44 } 45 }46 47 48 public static Connection getConnection()49 {50 synchronized(connectionspool)51 {52 if(connectionspool.size()==0)53 {54 try {55 connectionspool.wait();56 } catch (InterruptedException e) {57 // TODO Auto-generated catch block58 e.printStackTrace();59 }60 return getConnection();61 }62 else {63 Connection conn=connectionspool.removeFirst();64 System.err.println("pool中还有连接数:"+connectionspool.size());65 return conn;66 }67 }68 } 69 }

利用多线程测试代理连接池

1 public class TestProxy  { 2     public static void main(String[] args) { 3         for(int i=0;i<3000;i++) 4         { 5             new MyThread().start(); 6         } 7     } 8 } 9 10 class MyThread extends Thread11 {12     @Override13     public void run() {14         Connection con = null;15         try{16             con = JdbcUtil2.getConnection();17             System.err.println(this.getName()+","+con);18             con.setAutoCommit(false);//设置事务的开始19             String sql = "insert into users values('"+this.getName()+"','Tom','44')";20             Statement st = con.createStatement();21             st.execute(sql);22             con.commit();23             System.err.println(this.getName()+"子线程执行完成。。。。。");24         }catch(Exception e){25             e.printStackTrace();26         }finally{27             try {28                 con.setAutoCommit(true);29                 con.close();30             } catch (SQLException e) {31                 e.printStackTrace();32             }33         }34     }35 }
View Code

 

转载于:https://www.cnblogs.com/liuwt365/p/4101514.html

你可能感兴趣的文章
hadoop2.4.1+hbase0.98.3实现的分布式网盘系统初步
查看>>
ibatis批量新增-自增长序列
查看>>
linux系统管理之九:rpm安装包
查看>>
Linux系统中查看日志的常用命令
查看>>
java基础(二) 自增自减与贪心规则
查看>>
VMWare View的组件
查看>>
Linux下date命令使用举例说明
查看>>
Centos6下SVN服务器(结合Apache)的搭建
查看>>
Reactor和Proactor模式
查看>>
实验:关于XPath中的13个轴
查看>>
品牌的网闸介绍
查看>>
手势滑动源码(适合新手)
查看>>
我的友情链接
查看>>
快速熟悉开源项目
查看>>
Linux Centos 6.2 装好PHP启动Apache错误libmysqlclient.so.18:
查看>>
我的开发工具包
查看>>
多版本python下,安装pip
查看>>
AndroidManifest.xml文件解析
查看>>
【我的V日志】2010年1月29日星期五
查看>>
我的友情链接
查看>>