`
ysen
  • 浏览: 122205 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对象池的

    博客分类:
  • java
 
阅读更多

对象池是存放一组特定的对象的容器。对象池是解决性能的一种途径,当我们使用一个对象比较频繁的时候,而且该对象不某些属性不是公有的,就需要通过创建对象池将它们存放起来,避免频繁的创建销毁的开销。

 

 

下面是数据库连接池的实现原理:

 

 

/**
 * 数据库连接池
 * 
 * @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);
		}

	}

}

 

分享到:
评论
12 楼 Agrael 2010-04-29  
用个PoolConnection包装Connection,重写close方法。用事件来回收连接灵活性高得多。
11 楼 chenyulong1 2010-04-29  
楼主是不是参考了head first hibernate 3?
10 楼 hommy8 2010-04-29  
太简陋了,不想说
9 楼 guanliScott 2010-04-29  
BlockingQueue控制并发更好些吧。
8 楼 thorlst 2010-04-29  
对 对象池的概念都理解错了
7 楼 thorlst 2010-04-29  
getConnection();close() 方法加上synchronized   失败。。
6 楼 fbj203 2010-04-29  
多线程估计会有问题,一堆线程排队get连接,一堆用完连接的排队close连接就死锁了
5 楼 whaosoft 2010-04-29  
这个的性能 不是太好吧? 而且感觉用 Vector  不如用 Queue
4 楼 treblesoftware 2010-04-28  
加个synchronized ,性能就完蛋一半了。
3 楼 superheizai 2010-04-28  
为何是vector?
2 楼 a379803901 2010-04-28  
我加了一个良好,不过还要写的深入一点。。
1 楼 抢街饭 2010-04-28  
来学习一下 收藏了

相关推荐

    工厂设计模式附加对象池说明

    本资源包含两部分:工厂设计模式和对象池的设计与实现,主要面向Java开发者。 首先,我们来深入理解工厂设计模式。工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需暴露创建逻辑,同时允许...

    Unity 工具类 之 简单的对象池管理类 ObjectPoolManager 实现

    Unity 工具类 之 简单的对象池管理类 ObjectPoolManager 实现 1、单例类,保证整个场景中只有一个类管理对象池; 2、把需要的对象以对象池形式管理起来,需要的时候 拿出来显示即可,不需要的时候隐藏以来即可; ...

    UE4 Actor对象池插件

    在这个场景中,"UE4 Actor对象池插件"是一个专门针对UE4设计的工具,用于优化游戏性能,特别是处理大量动态对象的创建和销毁。对象池是一种内存管理策略,它预先创建并存储一组对象,当需要时可以从池中获取,而不是...

    高效的,固定大小的对象池

    在计算机科学和编程领域,对象池是一种内存管理策略,它预先创建并维护一组对象,以供重复使用,而不是每次需要时都创建新对象。这种方式可以显著提高程序性能,特别是对于那些生命周期短暂但创建成本较高的对象。...

    deePool高效的JavaScript对象池

    为了解决这个问题,开发者们引入了“对象池”概念, DeePool 就是一个实现这一概念的高效JavaScript库。本文将深入探讨DeePool的工作原理、优势以及如何在实际项目中应用。 ### DeePool简介 DeePool 是一个专为...

    Unity 对象池插件 Easy ObjectPool 2.0

    Unity 轻量高效对象池插件 // // 摘要: // 首次加载是否完成 public static bool firstPreloadFinish { get; } // // 摘要: // 获取实例 public static EasyObjectPool GetInstance(); // // 摘要: //...

    Unity中对象池插件

    Unity中的对象池是一种优化游戏性能的技术,主要用于管理游戏对象,如敌人、子弹或者特效等,以减少频繁创建和销毁对象带来的开销。对象池插件是实现这一技术的工具,它可以自动化地管理游戏对象的生命周期,提高...

    C#自定义对象池

    在C#编程中,对象池是一种优化资源管理的技术,它主要用于减少对象的创建和销毁的开销。在数据库操作中,频繁地打开和关闭数据库连接会导致大量的系统资源消耗,包括内存和CPU时间。通过实现自定义的对象池,我们...

    Java对象池技术的原理及其实现

    ### Java对象池技术的原理及其实现 #### 摘要 本文深入探讨了Java对象池技术的基本原理及其实现方式,旨在帮助读者理解如何利用对象池优化Java应用程序的性能。通过对对象池技术核心概念——缓存与共享的阐述,本文...

    对象池简单Demo(资源包)

    对象池在计算机科学,尤其是游戏开发领域,是一个重要的设计模式,它主要应用于管理频繁创建和销毁的对象,以提高性能和优化资源使用。Unity引擎中,对象池被广泛应用于游戏对象的生命周期管理,如敌人、子弹或者...

    unity子弹对象池详细注释

    在Unity游戏开发中,对象池是一种优化资源管理的技术,它能有效地减少对象的频繁创建与销毁,从而提高游戏性能。本教程将详细讲解基于Unity的子弹对象池实现,以及如何通过注释理解并扩展其功能。 一、对象池概念 ...

    Java对象池实现源码

    在Java编程中,对象池是一种优化资源管理的技术,它的核心思想是预先创建并维护一组对象,供程序在需要时重复使用,而不是每次需要时都创建新的对象。这有助于减少对象的创建和销毁带来的开销,特别是在频繁创建和...

    对象池 射击游戏 子弹的反复生成

    对象池是一种在软件开发中,特别是游戏开发中广泛使用的优化技术。它的主要目的是为了提高程序性能,减少系统资源的频繁创建和销毁,特别是在处理大量短暂生命周期的对象时,如射击游戏中频繁生成和消失的子弹。 在...

    对象池

    对象池是一种在软件设计中常见的优化技术,主要目的是提高程序性能和减少系统资源的消耗。在Java编程中,对象池通常用于管理那些创建和销毁成本较高的对象,通过复用已存在的对象来避免频繁的实例化操作。这个压缩...

    性能优化_对象池

    "对象池"是一种常见的性能优化策略,它针对的是频繁创建和销毁对象所导致的性能损失。本文将深入探讨对象池的概念、工作原理以及在实际应用中的优势和注意事项。 对象池的基本思想是预先创建并维护一组对象,而不是...

    unity对象池的案例Demo

    Unity对象池是一种优化游戏性能的技术,它通过预先创建并存储一系列可重用的游戏对象,避免了频繁的对象实例化和销毁过程,从而减少了内存碎片和CPU开销。在本案例Demo中,我们将深入探讨Unity对象池的工作原理、...

    用Dictionary写的对象池

    对象池是一种在软件开发中用于优化资源管理的技术,它的核心思想是预先创建并维护一组对象,以便在需要时快速分配,而不是每次都新建对象。这种方式可以减少频繁创建和销毁对象带来的性能开销,尤其是在处理大量短...

    apache对象池的实现

    Apache对象池技术是一种高效利用资源的策略,它通过预先创建并维护一组可重用对象来减少频繁创建和销毁对象带来的开销。在Java环境中,Apache Commons Pool库是实现对象池的常见工具,它提供了多种对象池实现,适用...

    Unity对象池的理解和使用

    对于对象池的优化逻辑其实是见仁见智的,并不是随随便便就拿来用,其实很多时候我们并不需要通过对象池来处理,通过对象池的主要目的是: 防止对象被频繁的创建和删除,从而内存抖动、频繁GC(垃圾回收)对象初始化...

    Unity做的对象池小案例

    首先,理解对象池的基本原理:对象池管理一组已创建的对象,而不是在需要时创建新对象,而是从池中获取已存在的、但当前未使用的对象。这种方式避免了频繁的`new`操作和垃圾回收带来的开销。在Unity中,对象池通常...

Global site tag (gtag.js) - Google Analytics