锁定老帖子 主题:对象池的
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-26
对象池是存放一组特定的对象的容器。对象池是解决性能的一种途径,当我们使用一个对象比较频繁的时候,而且该对象不某些属性不是公有的,就需要通过创建对象池将它们存放起来,避免频繁的创建销毁的开销。
下面是数据库连接池的实现原理:
/** * 数据库连接池 * * @author Administrator * */ public class DBConnectionPool { private final static int MAX_SIZE = 10; private final static int MIN_SIZE = 3; private final static Vector pool = new Vector(); static { for (int i = 0; i < MIN_SIZE; i++) { pool.add(createConnection()); } } /** * 得到一个数据库的连接,如果当前池里面没有连接,创建一个新的连接,如果数据库连接池里面有 连接,那么从池里面得到 * * @return */ public static synchronized Connection getConnection() { System.out.println(pool.size()); Connection conn = null; if (pool.isEmpty()) { conn = createConnection(); } else { int index = pool.size() - 1; conn = (Connection) pool.get(index ); pool.remove(conn); } return conn; } private static Connection createConnection() { Connection conn = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection( "jdbc:oracle:thin:@127.0.0.1:1521:ysen", "ysen", "123"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } public static synchronized void close(Connection conn) { if (pool.size() >= MAX_SIZE) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } else if (pool.size() < MAX_SIZE) { pool.add(conn); } } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-04-28
我加了一个良好,不过还要写的深入一点。。
|
|
返回顶楼 | |
发表时间:2010-04-28
为何是vector?
|
|
返回顶楼 | |
发表时间:2010-04-28
加个synchronized ,性能就完蛋一半了。
|
|
返回顶楼 | |
发表时间:2010-04-29
这个的性能 不是太好吧? 而且感觉用 Vector 不如用 Queue
|
|
返回顶楼 | |
发表时间:2010-04-29
多线程估计会有问题,一堆线程排队get连接,一堆用完连接的排队close连接就死锁了
|
|
返回顶楼 | |
发表时间:2010-04-29
getConnection();close() 方法加上synchronized 失败。。
|
|
返回顶楼 | |
发表时间:2010-04-29
对 对象池的概念都理解错了
|
|
返回顶楼 | |
发表时间:2010-04-29
BlockingQueue控制并发更好些吧。
|
|
返回顶楼 | |
发表时间:2010-04-29
太简陋了,不想说
|
|
返回顶楼 | |