线程池谈谈我本身的理解吧: html
针对以上的理解,在编程中能够这样实现: java
下面是主要实现代码 sql
public Connection getConnection() throws SQLException { synchronized(MysqlUtils.class) { while(list.size() <= 0 ) { try { log.info(Thread.currentThread().getName() + " wait() " ); MysqlUtils.class.wait(); } catch (InterruptedException e) { log.error(" Thread " + Thread.currentThread().getName() + " wait() error!"); } } final Connection con = list.removeFirst(); Connection conn = (Connection) Proxy.newProxyInstance(MysqlUtils.class.getClassLoader() , new Class[]{Connection.class} ,new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if(!method.getName().equals("close")) { return method.invoke(con, args); } else { synchronized(MysqlUtils.class) { list.add(con); MysqlUtils.class.notifyAll(); log.info(Thread.currentThread().getName() + " release connection "); return null; } } } }); return conn; } }
池子的最大链接,最少链接,定时之类的不少都没有实现,只是简单的弄了一个固定链接数量 数据库
本篇博客参考了http://www.cnblogs.com/xdp-gacl/p/4002804.html 博客的代码,特此指出,也算是我本身的总结 编程
以上有什么错误的地方,欢迎你们指出,目前也在学习中,一块儿进步哈 网络
12楼:frankiegao123 发表于 2012-01-21 13:14 回复此评论 一个能够用于生产环境中的链接池最少须要具有如下条件: 1:实现了 javax.sql.DataSource 接口 2:从链接池中得到的链接,在调用 Connection#close 时并非真正意义上的关闭链接,而是将其还回到池中去 3:池中的链接被数据库服务端关闭时,这些链接该如何处理 4:链接回收问题。若是设了最大 50 个链接,在并发量高时正好用到这 50 个链接,若是高并发期事后,假如只有 10 个链接被用到,那剩下的 40 个应该要被回收,不能占用这些宝贵的资源 5:若是网络中断后又从新链接上,池中的链接该如何处理,这与 3 是相似的,涉及一个池中链接的健康检查机制